一、顺序容器的定义

1.顺序容器
vector
list
deque
2.顺序容器适配器
stack
queue
priority_queue

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include "Cat.h"
#include "Dog.h"

using namespace std;

int main()
{
	//顺序容器中的保存类型是非常灵活的
	vector<string> svec;//默认的构造函数
	svec.push_back("hello");
	svec.push_back("C++");
	svec.push_back("STL");
	list<int> ilist;
	vector<Dog> dogvec;//容器中也可以存放自己声明的Dog类,容器中的模板参数各种各样的类型都可以
	list<Cat> catlist;
	
	vector<int> ivec;//默认的构造函数
	ivec.push_back(1);
	ivec.push_back(2);
	ivec.push_back(3);
	vector<int> ivec2(ivec);//有参数的构造函数,利用第一个向量里的数据初始化第二个向量

	//list<int> ilist(ivec);   //错误 ivec vector类型的容器,不能初始化list类型的容器
	list<string> slist(svec.begin(), svec.end());
	vector<string>::iterator mid = svec.begin() + svec.size() / 2;

	deque<string> front(svec.begin(), mid);
	deque<string> back(mid, svec.end());
  

	return 0;
}

二、迭代器和迭代范围

1.每一种容器都有自己的迭代器,所有的迭代器接口都是一样的
2.在整个标准库中,经常使用形参为一对迭代器的构造函数
3.常用的迭代器操作
*iter、++iter、–iter、iter1==iter2、iter1!=iter2

4.vector和deque容器的迭代器的额外操作
iter+n、iter-n、>、>=、<、<=

5.迭代器的范围
begin/end、first/last

6.使迭代器失效的容器操作

#include <iostream>
#include <vector>
#include <deque>
#include <list>

using namespace std;

int main()
{
	vector<int> a;
	deque<int> b;
	list<int> c;

	a.push_back(10);
	a.push_back(20);
	a.push_back(30);
	a.push_back(40);
	a.push_back(50);

	vector<int>::iterator iter1 = a.begin();
	vector<int>::iterator iter2 = a.end();//end()是指向容器中最后一个元素的下一个

	cout << *iter1 << endl;
	iter1++;
	cout << *iter1 << endl;
	iter1++;
	cout << *iter1 << endl;
	iter1--;
	cout << *iter1 << endl;

	vector<int>::iterator first = a.begin();
	vector<int>::iterator last = a.end();
	while (first!=last)
	{
		cout << *first << endl;
		first++;
	}

	vector<int>::iterator x = a.begin();
	vector<int>::iterator m = x + a.size() / 2;//中间元素数据的指针
	cout << "中间:" << *m << endl;

	return 0;
}

7.编写一个函数,其形参是一对迭代器和一个int类型的数值,实现在迭代器标记的范围内寻找这个int类型的数值,并返回一个bool值表示是否能找到。

#include <iostream>
#include <vector>

using namespace std;

bool findInt(vector<int>::iterator beg, vector<int>::iterator end, int ival);


int main()
{
	vector<int> a;
	a.push_back(2);
	a.push_back(9);
	a.push_back(12);
	a.push_back(7);
	a.push_back(28);

	vector<int>::iterator k = a.end();

	bool result = findInt(a.begin(), k, 28);

	if (result == true)
		cout << "找到!" << endl;
	else
		cout << "没找到!" << endl;
	return 0;

}
//从beg---end范围内找ival这个值,前包后不包,end迭代器是指向容器中最后一个元素的  下一个空位置
bool findInt(vector<int>::iterator beg, 
	vector<int>::iterator end, int ival)

{
	while (beg!=end)
	{

		if (*beg == ival)
			break;
		else
			++beg;
	}

	if (beg != end)
		return true;
	else
		return false;

}

8.重写7的程序,查找元素的值的值,并返回元素的迭代器

#include <iostream>
#include <vector>

using namespace std;

vector<int>::iterator findInt(vector<int>::iterator beg,
	vector<int>::iterator end, int ival)
{
	while (beg!=end)
	{
		if (*beg == ival)
			break;
		else
			++beg;

		return beg;
	}
}

int main()
{
	int ia[] = { 0,1,2,3,4,5,6 };
	vector<int> ivec(ia, ia + 7);
	vector<int>::iterator result = findInt(ivec.begin(), ivec.end(), 5);

	if (result == ivec.end())
		cout << "没找到!" << endl;
	else
		cout << "找到了!" << endl;
	return 0;
}

9.使用迭代器编写程序,从标准输入设备输入若干个string类型,并且把他们存放到同一个Vector对象中,输出Vector对象中的所有元素。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
	vector<string> svec;
	string str;

	cout << "Enter some strings(Ctrl+Z to end):" << endl;

	while (cin>>str)
	{
		svec.push_back(str);
	}

	for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
		cout << *iter << endl;
	return 0;
 }

10.重新写9,用list容器

#include <iostream>
#include <vector>
#include <list>
#include <string>

using namespace std;

int main()
{
	//vector<string> svec;
	list<string> slst;
	string str;

	cout << "Enter some strings(Ctrl+Z to end):" << endl;

	while (cin >> str)
	{
		//svec.push_back(str);
		slst.push_back(str);
	}

	//for (vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
	//	cout << *iter << endl;
	for (list<string>::iterator iter = slst.begin();
		iter!=slst.end(); ++iter)
		cout << *iter << endl;
	return 0;
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐