C++Primer第五版 第九章习题答案(1~10)

时间:2023-02-13 20:36:08

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():清空容器

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