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;
}