基础概念讲解
容器:
用来管理一组元素
例子1:初识容器,迭代器,算法
例子2:字符串类的遍历,--迭代器方式和数组方式(str[] 和 at()发生异常)
字符指针和string的转换-- s1.c_str()
把String拷贝到char * --s1.copy();
字符串连接 -- 运算符重载或者append();
字符串的查找和替换 --find()
查找指定字符串出现的次数
替换指定的字符串--
vector容器
vector是将元素置于一个动态数组中加以管理的容器。
vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。
vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。
使用:
vector<int> vecInt; //一个存放int的vector容器。
vector<float> vecFloat; //一个存放float的vector容器。
vector<string> vecString; //一个存放string的vector容器。
vector<CA> vecCA; //用于存放CA对象的vector容器。
注意事项:由于容器元素的存放是按值复制的方式进行的,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常。
vector使用
1、删除尾部元素 back() pop_back()
2、修改头部元素 front()
函数返回值做左值,应该返回一个引用(为什么?)
3、vector的初始化
vector(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身
vector(const vector &vec); //拷贝构造函数
4、vector遍历
数组访问,提前分配好内存。
push-back尾插 ,size?
5、迭代器访问
注意:begin end指向问题。
迭代器的种类:课件
逆向遍历:
for(vector<int>::reverse_iterator rit=vecInt.rbegin(); rit!=vecInt.rend(); ++rit)
6、删除
指定区间删除
v1.erase();
删除指定值的元素
v1.erase()//删除迭代器所指向的元素后,指针自动加1
7、插入
insert
deque容器
deque是双端数组,而vector是单端的。
1、插入删除
deque.push_back(elem); //在容器尾部添加一个数据
deque.push_front(elem); //在容器头部插入一个数据
deque.pop_back(); //删除容器最后一个数据
deque.pop_front(); //删除容器第一个数据
2、查找元素在数组中的下标
deque<int>::iterator it = find(v1.begin(),v1.end(),3);
if(it!=v1.end()){
cout<<distance(v1.begin(),it);
}
stack容器
push() top()//获取栈顶元素 pop()删除
queue
push() front()//获取元素 pop()删除
list
是一个双向链表容器,可高效地进行插入删除元素。
list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。
It++(ok) it+5(err)
1、3号位置插入 insert
2、指定区间删除
说明:STL部分为理解部分,详见STL 模板库。