1.容器位置操作:
c.begin() 返回一个迭代器,它指向容器 c 的第一个元素
c.end() 返回一个迭代器,它指向容器 c 的第一个元素
c.rbegin() 返回一个逆序迭代器,它指向容器 c 的最后一个元素
c.rend() 返回一个逆序迭代器,它指向容器 c 的第一个元素前面的位置
2.顺序容器添加元素操作:
注意:容器元素都是副本,被复制的原始值与新容器中的元素各不相关,此后,容器内元素值发生变化时,被复制的原值不会受到影响,反之亦然。
c.push_back(t)
在容器 c 的尾部添加值为 t 的元素。返回 void 类型 。
c.push_front(t)
在容器 c 的前端添加值为 t 的元素。返回 void 类型。
只适用于 list 和 deque 容器类型。
c.insert(p,t)
在迭代器 p 所指向的元素前面插入值为 t 的新元素。返回指向新添加元素的迭代器。
c.insert(p,n,t)
在迭代器 p 所指向的元素前面插入 n 个值为 t 的新元素。返回 void 类型。
c.insert(p,b,e)
在迭代器 p 所指向的元素前面插入由迭代器 b 和 e 标记的范围内的元素。返回 void 类型。
示例:
list<int> ilist;
for (size_t ix = 0; ix != 4; ++ix)
ilist.push_front(ix);
3.顺序容器添加元素操作迭代器失效问题:
在 vector 或 deque 容器中添加元素时,可能会导致某些或全部迭代器失效。假设所有迭代器失效是最安全的做法。这个建议特别适用于由 end 操作返回的迭代器。在容器的任何位置插入任何元素都会使该迭代器失效。
可以在每次做完插入运算后重新计算迭代器值,以解决迭代器失效问题:
while (first != v.end()) {
// do some processing
first = v.insert(first, 42); // insert new value
++first; // advance first just past the element we added
}
4.顺序容器大小操作:
c.size() 返回容器 c 中的元素个数。返回类型为 c::size_type。
c.max_size() 返回容器 c 可容纳的最多元素个数,返回类型为 c::size_type。
c.empty() 返回标记容器大小是否为 0 的布尔值。
c.resize(n) 调整容器 c 的长度大小,使其能容纳 n 个元素,如果 n < c.size(),则删除多出来的元素;否则,添加采用值初始化的新元素。
c.resize(n,t) 调整容器 c 的长度大小,使其能容纳 n 个元素。所有新添加的元素值都为 t。
5.顺序容器大小操作迭代器失效问题:
resize 操作可能会使迭代器失效。在 vector 或 deque 容器上做 resize 操作有可能会使其所有的迭代器都失效。
对于所有的容器类型,如果 resize 操作压缩了容器,则指向已删除的元素迭代器失效。
6.访问元素操作*使用前提:容器不为空
c.back()
返回容器 c 的最后一个元素的引用。如果 c 为空,则该操作未定义。
c.front()
返回容器 c 的第一个元素的引用。如果 c 为空,则该操作未定义。
c[n]
返回下标为 n 的元素的引用。
如果 n <0 或 n >= c.size(),则该操作未定义。只适用于 vector 和 deque 容器。
c.at(n)
返回下标为 n 的元素的引用。如果下标越界,则该操作未定义。只适用于 vector 和 deque 容器。
示例:
if (!ilist.empty()) {// 容器不为空
list<int>::reference last2 = ilist.back();
cout << svec.at(0); // throws out_of_range exception
}
7.删除顺序容器内元素*使用前提:容器不为空
c.erase(p)
删除迭代器 p 所指向的元素。
返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果 p 本身就是指向超出末端的下一位置的迭代器,则该函数未定义。
c.erase(b,e)
删除迭代器 b 和 e 所标记的范围内所有的元素。
返回一个迭代器,它指向被删除元素段后面的元素。如果 e 本身就是指向超出末端的下一位置的迭代器,则返回的迭代器也指向容器的超出末端的下一位置。
c.clear()
删除容器 c 内的所有元素。返回 void。
c.pop_back()
删除容器 c 的最后一个元素。返回 void。如果 c 为空容器,则该函数未定义。
c.pop_front()
删除容器 c 的第一个元素。返回 void。如果 c 为空容器,则该函数未定义。只适用于 list 或 deque 容器
示例:
while (!ilist.empty()) {// 容器不为空
process(ilist.front()); // do something with the current top of ilist
ilist.pop_front(); // done; remove first element
}
8.删除顺序容器内元素操作迭代器失效问题:
erase、pop_front 和 pop_back 函数使指向被删除元素的所有迭代器失效。对于 vector 容器,指向删除点后面的元素的迭代器通常也会失效。而对于 deque 容器,如果删除时不包含第一个元素或最后一个元素,那么该 deque 容器相关的所有迭代器都会失效。
9.顺序容器的赋值操作:
c1 = c2
删除容器 c1 的所有元素,然后将 c2 的元素复制给 c1。c1 和 c2 的类型(包括容器类型和元素类型)必须相同。
c1.swap(c2)
交换内容:调用完该函数后,c1 中存放的是 c2 原来的元素,c2 中存放的则是 c1 原来的元素。c1 和 c2 的类型必须相同。该函数的执行速度通常要比将 c2 复制到 c1 的操作快。要交换的容器的类型必须匹配:操作数必须是相同类型的容器,而且所存储的元素类型也必须相同。
c.assign(b,e)
重新设置 c 的元素:将迭代器 b 和 e 标记的范围内所有的元素复制到 c 中。b 和 e 必须不是指向 c 中元素的迭代器。
c.assign(n,t)
将容器 c 重新设置为存储 n 个值为 t 的元素。
10.顺序容器的赋值操作迭代器失效问题:
赋值和 assign 操作使左操作数容器的所有迭代器失效。swap 操作则不会使迭代器失效。完成 swap 操作后,尽管被交换的元素已经存放在另一容器中,但迭代器仍然指向相同的元素。
11.assign
和赋值操作符(=)的作用类似,但是赋值操作符(=)只适用于果两个容器类型相同,其元素类型也相同的情况;
assign则还可适用于两个容器类型不同,元素类型不相同但是相互兼容的情况。
示例:
slist1.assign(slist2.begin(), slist2.end());
slist1.assign(10, "Hiya!"); // 10 elements; each one is Hiya!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/winjack11/archive/2009/07/11/4340200.aspx