标签:
<vector>:可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。
<deque>:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。
<list>:双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作速度都很快。
<forward_list>:单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快。
<array>:固定大小数组。支持快速随机访问。不能添加或删除元素。
<string>:与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快。
通常用vector是最好的选择。其次list。
vector<int>::iterator iter;
vector<int>vec1 = vec2; 【将vec1初始化为vec2的拷贝
特殊:定义array
array<int, 42>; 【要指定大小,包含42个int的数组
c1.swap(c2); 【交换c1与c2,比拷贝快,
特别的:对于顺序容器,assign
vectorString.assign(listChar.begin(), listChar.end()); 【将一个char型的list拷贝到string型的vector里
c.emplace_back(args); 【forward_list不支持push_back
c.emplace_front(args); 【在c的头部添加一个值为t或者由args创建的元素。return void
c.emplace(p, args); 【在迭代器p指向的元素之前插入一个值为t或者由args创建的元素。返回新添加元素的迭代器。
c.insert(p, b, e); 【将迭代器b和e指定的范围内的元素插入到迭代器p之前
c.insert(p, il); 【il是一个花括号包围的元素值列表,将这些定值插入到迭代器p之前
特别的:使用insert的返回值,可以在一个特定的位置反复插入一个值。
while(cin>>word)
iter = lst.insert(iter, word);
c.front(); 【返回收元素的引用
c.at(n); 【好像和上面差不多,但如果越界会抛出out_of_range异常
c.pop_front(); 【删除c的首元素,返回void。vector和string不支持
c.erase(b, e); 【删除迭代器b, e中间的元素,返回e后的迭代器
另外:在对改变了容器的大小以后,迭代器、指针、引用可能会失效。所以应保证每次改变容器的操作之后都正确地重新定位迭代器。且,不要保存end返回的迭代器。
args的形式:
c, pos |
pos开始查找字符c, pos默认0 |
s2, pos |
pos开始查找字符串s2 |
cp, pos |
pos开始查找cp指向的C风格字符串 |
cp, pos, n |
pos开始查找cp指向的数组前n个字符 |
循环查找s中所有出现numbers的位置:
while( (pos = s.find_first_of(numbers, pos) ) != string::npos){
process();
++pos;
}
参数形式:
s2 |
比较s与s2 |
pos1, n1, s2 |
将s中pos2开始的n1个字符与s2比较 |
pos1, n1, s2, pos2, n2 |
将s中pos1开始的n1个字符与s2中pos2开始的n2个字符比较 |
cp |
比较s与cp指向的直到空字符 |
pos1, n1, cp |
s中从pos1开始的n1个字符与cp指向直到空字符的比较 |
pos1, n1, cp, n2 |
s中从pos1开始的n1个字符与cp指向的n2个字符的比较 |
to_string(val); |
val可以是任意算数形式 |
stoi(s, p, b); stol(s, p, b); stoul(s, p, b); stoll(s, p, b); stoull(s, p, b); |
都是string转换为整型,unsigned、long。 p是size_t型指针,用来保存第一个非数值型字符的下标。 默认0,即不保存。 b是转换用的基数,默认10。 |
stof(s, p); stod(s, p); stold(s, p); |
string 转换为float和double,p同上(但是不知道怎么用== |
三个顺序容器适配器:stack、queue、priority_queue
s.pop(); |
pop栈顶,但不返回该元素值 |
s.push(item); s.emplace(); |
将item压入栈顶,或者由args建造 |
s.top(); |
仅仅返回栈顶元素 |
用deque等构建了stack以后,就不能用deque的操作了,要用stack自己的操作
q.pop(); |
返回队列首元素,或priority_queue最高优先级元素,但不删除 |
q.front(); |
返回首元素或尾元素,但不删除 |
q.back(); |
只适用于queue |
q.top(); |
返回最高优先级元素,只适用于priority_queue |
q.push(item); q.emplace(args); |
在queue的末尾或priority_queue中恰当位置创建一个元素, 值为item或由args创建 |
priority_queue允许给元素建立优先级
标签:
原文地址:http://www.cnblogs.com/shadowhu/p/5263554.html