9.11
vector<int > i1;//里面全是0
vector<int > i2(5);//里面5个0
vector<int > i3(5,13);//里面5个13
vector<int > i4={1,2,3,4,5};//里面12345
vector<int > i5(i4);//拷贝i4的内容
vector<int > i6(i5.begin(),i5.end());//拷贝别的vector中的迭代器指定的内容
9.12
对于接受一个容器创建其拷贝的构造函数来说
本容器的类型,容器内的类型都要相同
但是对于接受两个本迭代器创建的构造函数来说,只要容器内的数据类型能够相互转换既可以
9.13
//定义一个list<int>类型的容器和一个vector<int >类型的容器
vector<int > i6={1,2,3,4,5,1,2,5}
list<int> item1={1,2,3,4,5,6,4,5,2,3,1,2,1,2,1,12,52};
//用list<int>类型的容器初始化item2
vector<double> item2(item1.begin(),item1.end());
//用vector<int >的容器初始化item3
vector<double> item3(i6.begin(),i6.end());
9.14
list<char*> list9_14_1;
vector<string> vec9_14_1;
//使用assign函数进行内容拷贝
vec9_14_1.assign(list9_14_1.cbegin(),list9_14_1.cend());
9.15
//初始化三个vec容器
vector<int > vec_9_15_1={1,2,3,4,5,6,7,8,9,41};
vector<int > vec_9_15_2={1,2,3,4,5,6,7,8,9};
vector<int > vec_9_15_3={1,2,3,4,5,6,7,8,9,41};
//第二个和第三个分别进行比较
if(vec_9_15_1==vec_9_15_2){
cout<<"vec_9_15_1与vec_9_15_2相等"<<endl;
}else{
cout<<"vec_9_15_1与vec_9_15_2不相等"<<endl;
}
if(vec_9_15_1==vec_9_15_3){
cout<<"vec_9_15_1与vec_9_15_2相等"<<endl;
}else{
cout<<"vec_9_15_1与vec_9_15_2不相等"<<endl;
}
9.16
比较不同类型的容器是编译不通过的(我用的codeblocks)
list<int> list9_16={1,2,3,4};
vector<int> vec9_16={1,2,3,4};
if(list9_16!=vec9_16){
cout<<"具有相同元素的两个不同容器不同"<<endl;
}else{
cout<<"具有相同元素的两个不同容器相同"<<endl;
}
要这样写
//首先初始化两个不同类型的元素,使他们有相同的元素
list<int> list9_16={1,2,3,4};
vector<int> vec9_16={1,2,3,4};
//进行比较
//将第一个容器类型转化成与第二个元素相同或的类型进行比较
if(vector<int>(list9_16.begin(),list9_16.end())==vec9_16){
cout<<"list9_16与vec9_16相等"<<endl;
}else{
cout<<"list9_16与vec9_16不相等"<<endl;
}
9.17
容器类型相同并且容器内元素支持<比较
9.18
ifstream ifs("C:\\study\\c++test\\endless.txt");
/**9.3.1第一题*/
deque<string> deq;
//此处不知道为啥会重复录入,还不知道为什么,到ifs>>str出现问题才会停下
for(string str;ifs>>str;deq.push_back(str))
for(auto item1=deq.cbegin();item1!=deq.cend();item1++)
cout<<*item1<<" ";
9.19
将deque容器改成list容器即可
list<string> list2;
for(string str;ifs>>str;list2.push_back(str))
for(auto item1=list2.cbegin();item1!=list2.cend();item1++)
cout<<*item1<<" ";
9.20
//从一个数字文件读入
deque<int > deq1,deq2;
ifstream ifs3("C:\\study\\c++test\\number.txt");
list<int> list3;
for(int i;ifs3>>i;list3.push_back(i))
for(auto item3=list3.begin();item3!=list3.end();item3++){
if((*item3)&1==1){
deq1.push_back(*item3);
}else{
deq2.push_back(*item3);
}
}
for(auto item1=deq1.begin();item1!=deq1.end();item1++){
cout<<*item1<<" ";
}
cout<<endl;
for(auto item1=deq2.begin();item1!=deq2.end();item1++){
cout<<*item1<<" ";
}
9.21
调用insert方法会将string参数拷贝到参数的迭代器之前,插入成功后又会返回插入的这个新元素的迭代器,然后循环往复
9.22
缺少迭代器的移动,可能会无限循环
因为只要长度合适,item!=mid是必然的。元素的插入情况要看some_val的值与初始item指向的值的比较
要改成
vector<int >::iterator iter = iv.begin(),mid=iv.begin()+iv.size/2;
while(iter != mid){
if(*iter==some_val){
//插入一个元素的时候返回插入元素的迭代器
iter=iv.insert(iter,2*some_val);
//保持迭代器的位置在未插入之前的地方
iter++;
}
//后移一位迭代器
iter++;
}