容器类在放入的都是元素的拷贝,而非引用。所以如果需要对元素做出改动,最好是把元素存在data[N]数组中,而仅仅在容器中存放数组下标。
vector
vector作为数组,vector <int> num[ N ],可以当作二维数组使用,由于所有的vector初始为空,所以N可以很大。
1、vector< vector<int> >,注意加空格,否则会编译错误。
2、迭代器访问:vector<int> vec;
vector<int> :: iterator it;
for(it = vec.begin(); it != vec.end(); it++) //vector 不支持 it < vec.end(), 只能用不等号, vec.end()指示最后一个元素的下一个地址。[ begin, end)
*it = 123; //使用迭代器 *it 即可
3、push_back()、 pop_back(),在末尾加入、删除一个元素, clear() 清空。
4、size(),返回大小。
5、insert(it, x):在迭代器it处插入x。 vector<int> :: iterator it = vec.begin(); vec.insert(it + 5, "abcde"); //数组下标5的低方插入"abcde"。
6、erase(it): 删除迭代器it处的元素。 erase(it, it + 5):删除区间 [it, it + 5) 的元素,左闭右开。
set
set内部元素自动递增排序,且不重复
1、find(x),查找x, 返回x处的迭代器,查找失败为end()。
2、insert(x), 插入x。
string
1、string转char[]: string ss = “abc”; char a* = ss.c_str();
char[]转string:直接赋值即可。
2、可直接相加, 可以比较大小。
3、string ss1 = "abcgh", ss2 = "def"; ss1.insert(3, ss2); // 在ss1[3]的位置插入ss2.
4、erase迭代器删除和vector一致, str.erase( pos, length); //从pos位置删除length长度的元素
5、substr(pos, length): 返回从pos开始长length 的子串。(区间操作,使用迭代器就是左闭右开,使用数字下标就是开始位置和长度)
map
1、map的迭代器使用, key = it->first, val = it->second;
2、map[ " key" ] 在查询过程中必须先确定是否存在 if(mp.count( "key" ) == 0),否则会返回错误的结果(没有该键值时,会在map中插入该key,并将其值设为默认值)。
3、mp.erase(key),删除以key为键的元素。
queue、stack
1、基本的push、pop操作,pop仅仅删除元素,并不返回。
2、队列不删除仅访问元素 : front、bac; 栈:top
3、都没有清空操作,需要自己写循环来pop
algorithm
1、max、min、abs、swap
2、sort(num, num + N, cmp):对于数字参数,b处应写最后一个元素的下一个位置; 对于容器,b处填end。
3、reverse(it, it2):填入区间,在该区间内反转,填写方式与sort一致。