9.1 顺序容器 Sequential Containers
vector: 快速随机访问,
list: 快速插入/删除 ,
deque: 双端队列
9.2 迭代器和迭代器的范围
迭代器操作:
*iter: 返回iter指向元素的引用。
iter->mem: 对iter 进行解引用, 等效于(*iter).mem。
++iter和iter++: 给iter加1, 使其指向下一个元素。
--iter和iter--: 指向下一个元素。
iter1 == iter2 和 iter1 != iter2 : 两个迭代器是同一容器的同一个元素,或都指向容器超出末端的下一位置时相等。
计算vector对象的中心位置:
vector<int>::iterator iter = vec.begin() + vec.size() / 2;
list 容器不支持迭代器的算术操作
Exercises Section 9.2
Exercise 9.7 :以下代码编译出错, list的 iterator 不支持 关系运算符操作
list<int> lst1; list<int>::iterator iter1 = lst1.begin(), iter2 = lst1.end(); while (iter1 < iter2) { break; }
Exercise 9.8:当iterator的字符串为空时,执行if内语句
Exercise 9.8:Write a loop to write the elements of a list reverse order.
#include <iostream>
#include <list>
#include <vector>
#include <sstream>
using namespace std;
void exercize_9_9();
int main() {
exercize_9_9();
return 0;
}
void exercize_9_9() {
list<string> list1 ;
for (short i = 0; i < 10; ++i) {
stringstream ss;
ss << i;
list1.push_back("string " + ss.str());
}
list<string>::iterator it = list1.end();
do
{
--it;
string s = *it;
cout << s.c_str() << endl;
}
while (it != list1.begin());
}
Exercise 9.10: Which, if any , of the following iterator uses are in error?
const vector< int > ivec(10); vector< string > svec(10); list< int > ilist(10); (a) vector<int>::iterator it = ivec.begin(); //错误:ivec中的迭代器是const,改成vector<int>::const_iterator
(b) list<int>::iterator it = ilist.begin()+2; //错误:list 中的迭代器不能进行算术加减运算
(c) vector<string>::iterator it = &svec[0]; //错误:svec[0],是字符型string。
(d) for (vector<string>::iterator it = svec.begin(); it != 0; ++it) //错误, it != 0改为 it != svec.end()
//....