习题9-1
(a)使用list,因为需要在任意位置插入数据;
(b)使用deque,deque是很快;
(c)vector,排序要不断调整位置,vector支持快速随机访问,不插入删除元素,只是改变顺序;
习题9-2
list<deque<int>>
习题9-3
1、begin和end必须分别指向同一容器中的元素或者是尾元素之后的尾元素之后的位置;
2、可以通过递增begin来达到end;
习题9-4
#include<iostream>
#include<vector>
using namespace std;
bool func(vector<int>::iterator begin, vector<int>::iterator end, int a);
void main()
{
vector<int> vec = { 1,2,3,4,5,6,10,13,15 };
cout.setf(ios_base::boolalpha); //设置输出bool型,不是int型数字;
cout<< func(vec.begin(),vec.end(), 4) << endl;
}
bool func(vector<int>::iterator begin, vector<int>::iterator end,int a)
{
int k = 0;
while (begin != end)
{
if (*begin != a)
++begin;
else
return true;
}
return false;
}
习题9-5
#include<iostream>
#include<vector>
using namespace std;
vector<int>::iterator func(vector<int>::iterator begin, vector<int>::iterator end, int a);
void main()
{
vector<int> vec = { 1,2,3,4,5,6,10,13,15 };
if (func(vec.begin(), vec.end(), 8) != vec.end())
cout << "we found it" << endl;
else
cout << "we did not find it" << endl;
}
vector<int>::iterator func(vector<int>::iterator begin, vector<int>::iterator end,int a)
{
int k = 0;
while (begin != end)
{
if (*begin != a)
++begin;
else
return begin;
}
return end;
}
习题9-6
list容器的迭代器没有"<"运算符操作;P99页3.4.2迭代器运算指出了vector,string有该运算符,P963.4.1标准容器迭代器运算符中则没有。
习题9-7
应该使用vector<int>::iterator类型;
习题9-8
读操作:list<string>::iterator或者list<string>::const_iterator
写操作:list<string>::iterator
习题9-9
begin返回的是iterator,可以读写所指向的元素;cbegin返回的是const_iterator;
习题9-10
(1)vector<int>::iterator;
(2)vector<int>::const_iterator;
(3)vector<int>::const_iterator;
(4)vector<int>::const_iterator;
s书中很明白的写道“只有对一个const对象调用这些函数时,才会得到一个const版本”,带c开头的版本则是返回反向const迭代器;
iterater看做指针的话,const_iterator指的是顶层const指针,即const int *;