C++Primer第五版 第九章习题答案(1~10)
2017-02-24 09:25
435 查看
1:知识点1:几种顺序容器的特点
vector:可变大小,支持快速随机访问,尾部插入数据很快
deque:双端队列。支持快速随机访问,头部插入数据很快
list:双向链表。支持双向顺序访问,在其任何位置插入删除数据都很快
array:固定大小数组,不能改变大小。(注意这里与普通的内置数组类型是不一样的)
string:与vector类似,专用于保存字符。
知识点2:在通常情况下,使用vector是非常好的选择。且新版本的标准库容器比旧版本快很多。C++程序应该使用标准库容器,而不是原始的数据结构如:内置数组。
(a)list,因为可能需要在容器的中间位置插入元素
(b)deque,因为需要在头部进行元素的删除,deque效率更高
(c)vector,无具体的删除插入操作,未知数量,vector是个不错的选择。
2:知识点1:容器中的元素类型可以是另一个容器
知识点2:本节中的几个比较重要的容器操作:
c.empty():c中存储了元素,返回false.
c.cbegin():返回const_iterator
c.clear():清空容器
3:知识点1:限制如下:
迭代器指向同一个容器或者最后一个元素之后的位置
可以反复递增begin直到end
知识点2:迭代器指向的元素范围是左闭合区间,注意end指向的是最后一个元素之后的位置。
4:
5:
6:迭代器之间无大于小于号的比较
感谢评论区指出问题:两个迭代器不在统一容器内不能直接比较
7:vector<int>::size_type //size_type指的是无符号整数类型
8:知识点:读和写的不同,如果要写则返回的必然不能是const iterator
9:cbegin()返回的是const iterator,不可被修改
rbegin()返回的是反向迭代器
10:
it1:vector<int>::iterator
it2:const vector<int>::iterator
it3:vector<int>::const_iterator
it4:const vector<int>::const_iterator
vector:可变大小,支持快速随机访问,尾部插入数据很快
deque:双端队列。支持快速随机访问,头部插入数据很快
list:双向链表。支持双向顺序访问,在其任何位置插入删除数据都很快
array:固定大小数组,不能改变大小。(注意这里与普通的内置数组类型是不一样的)
string:与vector类似,专用于保存字符。
知识点2:在通常情况下,使用vector是非常好的选择。且新版本的标准库容器比旧版本快很多。C++程序应该使用标准库容器,而不是原始的数据结构如:内置数组。
(a)list,因为可能需要在容器的中间位置插入元素
(b)deque,因为需要在头部进行元素的删除,deque效率更高
(c)vector,无具体的删除插入操作,未知数量,vector是个不错的选择。
2:知识点1:容器中的元素类型可以是另一个容器
知识点2:本节中的几个比较重要的容器操作:
c.empty():c中存储了元素,返回false.
c.cbegin():返回const_iterator
c.clear():清空容器
list<deque<int>>;//旧版本的编译器需要在两个尖括号中加空格
3:知识点1:限制如下:
迭代器指向同一个容器或者最后一个元素之后的位置
可以反复递增begin直到end
知识点2:迭代器指向的元素范围是左闭合区间,注意end指向的是最后一个元素之后的位置。
[begin , end)
4:
#include<iostream> #include<fstream> #include<sstream> #include<string> #include<vector> using namespace std; bool find1(vector<int>::iterator a, vector<int>::iterator b, int c)//迭代器的类型要弄清楚 { for (a; a != b; a++) { if (*a == c)//迭代器需进行解引用操作 { return true; } } return false; } int main(int argc, char**argv) { vector<int> vec(20);//必须事先指定这个大小,才知道end的指向 vec[0] = 4; vec[1] = 5; vec[2] = 2; vec[3] = 8; vec[4] = 9; vec[5] = 6; vec[6] = 7;//使用VS1010,不支持列表初始化,见谅 int find_member = 1; if ( find1(vec.begin(),vec.end(), find_member) ) { cout<<"We have found it"<<endl; } else cout<<"Sorry,there is no "<<find_member<<" in the range"<<endl; return 0; }
5:
#include<iostream> #include<fstream> #include<sstream> #include<string> #include<vector> using namespace std; vector<int>::iterator find1(vector<int>::iterator a, vector<int>::iterator b, int c)//迭代器的类型要弄清楚 { for (a; a != b; a++) { if (*a == c)//迭代器需进行解引用操作 { return a; } } return b;//未找到的情况,返回最后一个迭代器 } int main(int argc, char**argv) { vector<int> vec(20);//必须事先指定这个大小,才知道end的指向 vec[0] = 4; vec[1] = 5; vec[2] = 2; vec[3] = 8; vec[4] = 9; vec[5] = 6; vec[6] = 7;//使用VS1010,不支持列表初始化,见谅 int find_member = 1; if ( find1(vec.begin(),vec.end(), find_member) != vec.end() ) { cout<<"We have found it"<<endl; } else cout<<"Sorry,there is no "<<find_member<<" in the range"<<endl; return 0; }
6:迭代器之间无大于小于号的比较
感谢评论区指出问题:两个迭代器不在统一容器内不能直接比较
while(*iter1 < *iter2) /* */
7:vector<int>::size_type //size_type指的是无符号整数类型
8:知识点:读和写的不同,如果要写则返回的必然不能是const iterator
list<string>::iterator || list<string>::const_iterator //读操作 list<string>::iterator//写操作
9:cbegin()返回的是const iterator,不可被修改
rbegin()返回的是反向迭代器
10:
it1:vector<int>::iterator
it2:const vector<int>::iterator
it3:vector<int>::const_iterator
it4:const vector<int>::const_iterator
相关文章推荐
- C++Primer第五版 第九章习题答案(11~20)
- C++Primer第五版 第九章习题答案(51~52)
- C++Primer第五版 第十六章习题答案(1~10)
- C++Primer第五版 第十章习题答案(1~10)
- C++Primer第五版 第十九章习题答案(1~10)
- C++Primer第五版 第九章习题答案(21~30)
- C++Primer第五版 第四章习题答案(1~10)
- C++Primer第五版 第九章习题答案(31~40)
- C++Primer第五版 第九章习题答案(41~50)
- C++Primer第五版 第三章习题答案(1~10)
- C++Primer第五版 第十三章习题答案(1~10)
- C++Primer第五版 第五章习题答案(1~10)
- C++Primer第五版 第八章习题答案(1~10)
- C++Primer第五版 第七章习题答案(1~10)
- C++Primer第五版 第十八章习题答案(1~10)
- C++Primer第五版 第十五章习题答案(1~10)
- C++Primer 中文版 第五版 第九章课后习题答案
- C++Primer第五版 第十一章习题答案(1~10)
- C++Primer第五版 第十二章习题答案(1~10)
- C++Primer第五版 第二章习题答案(1~10)