【C/C++学院】(12)C++标准模板库STL

1.简介 

        STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。 

2.vector向量

#include "iostream"
#include "vector"
using namespace std;

//== != [] =
//(vector<int>模板类型
void printfArray(vector<int> &v)
{
	int size = v.size();
	for (int i = 0; i<v.size(); i++)
	{
		cout << v[i] << endl;
	}
}

void main()
{
	//定义一个数组(弹性)
	vector<int> v1(5); //int v[5]

	for (int i = 0; i<5; i++)
	{
		v1[i] = i + 1;
	}

	vector<int> v2(10);
	v2 = v1;

	for (int i = 0; i<5; i++)
	{
		cout << v2[i] << endl;
	}
	cout << v2.size() << endl;//5
	v2.resize(0);
	cout << v2.size() << endl;//0

	vector<int> v3(3);
	for (int i = 0; i<3; i++)
	{
		v3[i] = i + 10;//10, 11, 12
	}
	v3.push_back(3);
	v3.push_back(4);
	v3.push_back(5);
	printfArray(v3);//10 11 12 3 4 5 

	system("pause");
}
#include "iostream"
#include "vector"
using namespace std;

struct Teacher
{
	int age;
	char name[10];
};

void main01()
{
	struct Teacher t1, t2, t3;
	t1.age = 11;
	t2.age = 22;
	t3.age = 33;
	vector<Teacher> v3(0);
	v3.push_back(t1);
	v3.push_back(t2);
	v3.push_back(t3);

	for (int i = 0; i<3; i++)
	{
		cout << v3[i].age << endl;
	}

	system("pause");
}

void main()
{
	struct Teacher t1, t2, t3;
	t1.age = 11;
	t2.age = 22;
	t3.age = 33;
	vector<Teacher *> v3(0);
	v3.push_back(&t1);
	v3.push_back(&t2);
	v3.push_back(&t3);

	for (int i = 0; i<3; i++)
	{
		//struct Teacher *tmp = (struct Teacher *)v3[i];
		struct Teacher *tmp = v3[i];
		cout << tmp->age << endl;
	}

	system("pause");
}

3.stack

#include "iostream"
#include "stack"
using namespace std;

void main()
{
	//定义一个栈
	stack<int> s;
	//栈赋值
	for (int i = 0; i<5; i++)
	{
		//往栈中放元素
		s.push(i + 1);
	}

	//栈遍历
	while (!s.empty())
	{
		//获取栈顶元素
		int tmp = s.top();
		//弹出栈顶元素
		s.pop();
		printf("%d \n", tmp);
	}
	system("pause");
}

#include "iostream"
#include "stack"
using namespace std;

struct Teacher
{
	int age;
	char name[10];
};

void printfStack(stack<Teacher> &s)
{
	//栈遍历
	while (!s.empty())
	{
		//获取栈顶元素
		cout << s.top().age << endl;
		//弹出栈顶元素
		s.pop();
	}
}
void main()
{
	//定义一个栈
	Teacher t1, t2, t3;
	t1.age = 11;
	t2.age = 22;
	t3.age = 33;
	stack<Teacher> s;
	s.push(t1);
	s.push(t2);
	s.push(t3);

	printfStack(s);

	system("pause");
}

4.queue

#include "iostream"
#include "queue"
using namespace std;

void main()
{
	//建一个队列
	queue<int> q;
	//x向队列中添加一个元素
	for (int i = 0; i<5; i++)
	{
		q.push(i);
	}
	while (!q.empty())
	{
		//获取队列头元素
		int tmp = q.front();
		cout << tmp << endl;
		//弹出队列元素
		q.pop();
	}
	system("pause");
}

#include "iostream"
#include "queue"
using namespace std;

struct Teacher
{
	int age;
	char name[10];
};

void printfFont(queue<Teacher *> &q)
{
	while (!q.empty())
	{
		//获取队列头元素
		Teacher * tmp = q.front();
		cout << tmp->age << endl;
		//弹出队列元素
		q.pop();
	}
}
void main()
{
	//建一个队列
	queue<Teacher *> q;
	Teacher t1, t2, t3;
	t1.age = 11;
	t2.age = 22;
	t3.age = 33;

	//x向队列中添加一个元素
	q.push(&t1);
	q.push(&t2);
	q.push(&t3);

	printfFont(q);

	// 	while(!q.empty())
	// 	{
	// 		//获取队列头元素
	// 		Teacher * tmp = q.front();
	// 		cout<<tmp->age<<endl;
	// 		//弹出队列元素
	// 		q.pop();
	// 	}
	system("pause");
}

5.list 链表入门-迭代器用法演示

#include "iostream"
#include "list"
using namespace std;

void main()
{
	//建立了一个链表
	list<int> l;
	int len = l.size();
	cout << len << endl;

	//链表增加元素(尾查法)
	for (int i = 0; i<5; i++)
	{
		l.push_back(i);
	}
	len = l.size();
	cout << len << endl;

	//迭代器就是一个指针iterator
	list<int>::iterator current = l.begin();
	//l.end();

	while (current != l.end())
	{
		cout << *current << endl;
		current++;
	}

	cout << "**********我是分割线************" << endl;
	//把链表的首位置赋给迭代器指针
	current = l.begin();
	current++;
	current++;
	current++;
	l.insert(current, 100);

	for (list<int>::iterator p = l.begin(); p != l.end(); p++)
	{
		cout << (*p) << endl;
	}
	system("pause");
}

6.stl算法回调基础

#include "iostream"
#include "algorithm"
#include "cmath"
#include "vector"
using namespace std;

//打印上业务数据结构,是上层的事情,stl根本没有必要去关心,
void callbakFunc(int &v)
{
	cout << v << endl;
}
int comp(const int &a, const int &b)
{
	return a<b;
}

void main()
{
	vector<int> v(5);
	for (int i = 0; i<5; i++)
	{
		v[i] = rand() % 10;
	}

	for (int i = 0; i<5; i++)
	{
		printf("%d ", v[i]);
	}

	for_each(v.begin(), v.end(), callbakFunc);

	sort(v.begin(), v.end(), comp);

	for (int i = 0; i<5; i++)
	{
		printf("%d ", v[i]);
	}

	system("pause");
}
时间: 2024-10-28 06:00:30

【C/C++学院】(12)C++标准模板库STL的相关文章

STL学习系列之二:标准模板库(STL)介绍

此文为转贴文章,由于原文运行在Linux下,我在vc6/7下进行调试,作了部分修改!注意:所有的代码在vc6/vc7下调试通过!标准模板库(STL)介绍 标准模板库(STL)介绍 0 前言. 1 定义一个list 2 使用list的成员函数push_back和push_front插入一个元素到list中 3 list的成员函数empty() 4 用for循环来处理list中的元素 5 用STL的通用算法for_each来处理list中的元素 6 用STL的通用算法count_if()来统计lis

STL学习系列之一——标准模板库STL介绍

库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念:容器.迭代器.算法. STL的最大特点就是: 数据结构和算法的分离,非面向对象本质.访问对象是通过象指针一样的迭代器实现的: 容器是象链表,矢量之类的数据结构,并按模板方式提供: 算法是函数模板,用于操作

用标准模板库STL实现文件比较

要阅读本文,你要熟悉C++,熟悉类模板和函数模板.本文汇集了大量有关的信息,指引你逐步阅读. 本文用提问,设计和解决方案引导阅读.希望你能喜欢. 问题提出: 有二篇文章都含有许多行文字.我们要建立一个程序来找出二者之间的不同之处并将这些不同内容的行显示出来.程序必须做成可重复使用的组件,就是说,这个组件能够未经修改地被其他程序使用. 设计: 假设这二个文件非常之大(每个文件都有数千行),我们这样设计有关解决方案: 将各个文件读进内存块, 在内存块中进行文件内容比较, 将不同之处放进一个新的第三个

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢:(2)质量:标准库的都是经过严格测试的,正确性有保证:(3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平:(4)良好的编程风格:采用行业中普遍的做法进行开发. 在C++程序设计课程中,尤其是作为第一门程序设计课程,我们注重了语法.语言的

入门教程:JSP标准模板库(上)

js|标准|教程|模板|入门教程 简介JSP标准模板库(JSTL)是SUN公司发布的一个针对JSP开发的新组件.JSTL允许你使用标签(tags)来进行JSP页面开发,而不是使用多数JSP程序员已经习惯了的scriptlet代码方式开发.JSTL几乎能够做到传统JSP scriptlet代码能做的任何事情.你可能会疑惑,为什么我们需要另一种这样的HTML生成语言呢? STL允许JSP程序员使用tags而不是JAVA代码来编程.为了展示为什么这个是更优越的,下面将给出示例.我们会检查一个非常简单的

标准模板库介绍

标准模板库,也叫 STL,是一个 C++ 容器类库,算法和迭代器.他提供许多 基本算法,数据结构.STL 是一个通用库,即可以充份定制:几乎所有的 STL 组件都是模板.在你使用 STL 前,你必须了解模板的工作情况. 容器和算法 和许多类库一样,STL 包含容器类 - 可以包含其他对象的类.STL 包含向量 类,链表类,双向队列类,集合类,图类,等等.他们中的每个类都是模板,能包含 各种类型的对象.例如,你可以用 vector<int> ,就象常规的 C 语 言中的数组,除了 vector

C++标准模板库与数据结构的学习

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中极具革命性的一部分.该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性. 体验STL中的list STL中提供的list类,是一个双向循环链表类.从每一个元素(节点),都可以访问前面一个元素

入门教程:JSP标准模板库(下)

js|标准|教程|模板|入门教程 JSTL标签库JSTL通常被认为是一种单标签库.但JSTL实际上有4个标签库.这些标签库被概括为如下: 核心标签库?包含一些Web应用的必要的标签.核心标签库的实例包括循环,表达式赋值和基本输入输出.. 格式化/国际化标签库?包括被用来解析数据的标签库.这种标签会解析数据,比如日期,不同的场所区域等. 数据库标签库?包含被用来访问SQL数据库的标签.这些标签通常仅仅只创建原形(prototype)程序.这个是因为大多数程序不会直接从JSP页面中来处理数据库访问.

一步一步学STL标准模板库

list 的使用 在使用list必须包括头文件#include <list>, 1).如何定义一个list对象 #include <list> int main (void) { list<char > cList; //声明了list<char>模板类 的一个实例 } 2).使用list的成员函数push_back和push_front插入一个元素到list中 cList. push_back('a'); //把一个对象放到一个list的后面 cList.