9.11
vector<int > vec = { 1,2,3 };//元素为1,2,3 vector<int > vec{10}; //元素为10个0 vector<int > vec(10,1);//元素为10个1 vector<int > vec(vec1); // 元素为vec1的元素 vector<int > vec(vec1.bengin(), vec1.end()); // 元素为vec1的元素 vector<int > vec(vec1.bengin(), vec1.end()/2); // 元素为vec1的开始到一半的那个元素
9.12
创建其拷贝的构造函数,拷贝的是整个整体,而迭代器拷贝的是一个区间
9.13
list<int > testList= { 1,2,3 }; vector<int > testVector(testList.begin(), testList.end());
两段拷贝都能用迭代器拷贝执行,只要满足元素类型相同或者可以隐式转换即可,容器类型可以忽略
9.14
list<char* > testList = { "a","b", "c" }; vector<string > testVec(testList.begin(),testList.end());9.15
vector<int > testVec_0 = { 1,2,3,4,5 }; vector<int > testVec_1 = { 1,2,3 }; cout << (testVec_0 < testVec_1) <<endl;9.16
vector<int > testVec_0 = { 1,2,3,4,5 }; list<int > testList_0 = { 1,2,3 }; vector<int > testVec_1(testList_0.begin(), testList_0.end());
不能直接比较,所以将其中一个容器转换成另一种容器类型
9.17
c1和c2必须相同容器元素,元素必须定义了相应的比较运算符
9.18
int main() { string str; deque<string > tmpDeque; while (cin >> str) { tmpDeque.push_back(str); } for(deque<string >::iterator it = tmpDeque.begin(); it != tmpDeque.end();it++){ cout << *it << endl; } for (;;); return 0; }
9.19
int main() { string str; list<string > tmpDeque; while (cin >> str) { tmpDeque.push_back(str); } for(list<string >::iterator it = tmpDeque.begin(); it != tmpDeque.end();it++){ cout << *it << endl; } for (;;); return 0; }
9.20
int main() { list<int > listInt; deque<int > dequeEven; deque<int > dequeOdd; for (list<int >::iterator it = listInt.begin(); it != listInt.end(); it++) { if(*it % 2){ dequeEven.push_back(*it); }else{ dequeOdd.push_back(*it); } } for (;;); return 0; }
9.21
插入到vec指定的位置上,之后的元素整体往后瞬移插入元素大小位置,所以会很慢
9.22
指针没有进行变址操作,iter始终指向同一个地方
在while循环处增加iter++;
成功插入元素后iter应该重新指向,当前的iter会失效
9.23:
均为那唯一元素的值
9.24
[],front会直接报错
at会抛出异常
begin正常运行,但访问地址会报错
9.25
elem1和elem2关系是 删除 大于等于elem1的元素和小于elem2的元素,闭开区间
所以如果相等,则删除elem1指定的那个元素
如果都是尾后迭代器,则不发生任何事
如果elem2是尾后迭代器,则会删除elem1之后的所有元素
9.26
int main() { int ia[] = {0,1,1,2,3,5,8,13,21,55,89}; vector<int > intVec; list<int > intlist; auto beginIt = begin(ia); auto endIt = end(ia); for(; beginIt != endIt; beginIt++){ intVec.push_back(*beginIt); intlist.push_back(*beginIt); } for (vector<int >::iterator it = intVec.begin(); it != intVec.end(); ) { if(*it % 2 == 0){ intVec.erase(it); }else{ it++; } } for (list<int >::iterator it = intlist.begin(); it != intlist.end(); ) { if (*it % 2) { intlist.erase(it); } else { it++; } } for (;;); return 0; }