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