STL学习注意点
STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
其中,
算法:各种常用的算法,如sort、find、copy、for_each等;算法又分为质变算法和非质变算法。
迭代器:扮演了容器与算法之间的胶合剂;迭代器分为输入迭代器、输出迭代器、前向迭代器、双向迭代器以及随机访问迭代器等。
仿函数:行为类似函数,可作为算法的某种策略。
适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
我们在使用STL中string容器进行查找时需要注意到find()和rfind()的使用特点,find()是从左往右进行查找,而rfind()是从右往左查找。
string str111 = "abcdefbc"; int pos1 = str111.find("bc"); cout<<"pos1= "<<pos1<<endl; pos1 = str111.rfind("bc"); cout<<"pos1= "<<pos1<<endl;
结果:

关于vector容器中的知识点:
需要注意的是vector容器的容量和大小不是一个概念,同时当我们使用resize()重新指定容器大小时,,若是指定为更小的大小时,容量不会立即发生变化,指定为更大的大小时,容量会立即发生变化。
vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int> v31; v31 = v1; if (v31.empty()) { cout<<"v31为空!!"<<endl; }else { cout<<"v31不为空!!"<<endl; cout<<"v31的容量为:"<<v31.capacity()<<endl; cout<<"v31的大小为:"<<v31.size()<<endl; } v31.resize(15,10); printVector(v31); cout<<"v31的容量为:"<<v31.capacity()<<endl; cout<<"v31的大小为:"<<v31.size()<<endl; v31.resize(5); printVector(v31); cout<<"v31的容量为:"<<v31.capacity()<<endl; cout<<"v31的大小为:"<<v31.size()<<endl;
void printVector(vector<int> &v) { for (vector<int>::iterator it = v.begin(); it!= v.end(); it++) { cout<<*it<<" "; } cout<<endl; }
结果:

reserve(int len)函数可以根据指定特定空间大小,防止后面需要多次分配空间,如果数据量较大,可以一开始利用reserve预留空间
vector<int> v ;
//v.reserve(1000); int num =0; int * p =NULL; for (int i = 0; i < 1000; i++) { v.push_back(i); if (p!=&v[0]) { p=&v[0]; num++; } } cout<<"num= "<<num<<endl;

加入v.reserve(1000)后


浙公网安备 33010602011771号