stl的一些容器和算法
所有的头文件:
for_each
需要#include
接口:for_each(begin,end,func)
用法:相当于一个for循环,从begin开始 到end结束,执行函数。注意,此时func的参数应该为和begin和end一样的类型。
vector容器
动态规划数组,如果插入元素之后的vector的size不够 c++在内存中重新规划新的更大块内存将原来的vector元素完全复制后插入新的元素。
初始化或者拷贝构造
新建一个v1,把arr的东西复制进去。
assign函数效果等同于上边的数组初始化方式,具体用法为vectorv;vectorv1;v1.assign(v)把v的所有元素赋值给v1
插入和删除 非常重要
其他操作
empty:空返回true 非空返回false
resize(new_size):改变尺寸,多退少补0.
resize(new_size,elem):多的尺寸用elem元素来填充
size():返回元素个数
capacity():返回元素容量 元素容量一半要大元素个数很多,否则每次pushback数据的时候都要更改size非常麻烦。
front()(返回第一个元素)
back()返回最后一个元素
a.reserve(int n)设置a的预留空间为n个元素。
遍历
遍历需要通过vector自带的迭代器来遍历,不能直接用int类型指针。
string 容器
里边只能放char*类型的元素。
初始化方式:
访问(取值)操作 :重载运算符[]或者运用at函数:
string tein;
tein.at(i);找到其中第i个元素
相当于tein[i];
区别,重载以后的[]中方的位置是不能越界的,而()会抛一个异常out_of_range。
string容器的重载运算符操作(用于插入)
比如:string s1,s2,s3;
s1+=s2;
s1.append(s2);
s3 = s2 + s1;
上述写法均可。
查找操作
从前往后:find
从后往前;rfind
替换操作
s.replace(首位置,末位置,“替换成的字符”)
比较操作
s1.compare(s2);
若s1比s2大,返回1;小,返回-1;相等返回0.
这里的大小关系不是占用内存的大小关系。