1 C++中vector 删除元素的方法: pop_back; erase; std::remove;
a. 例如有数组容器V, 那么V.pop_back()会删除最后一个元素,该操作会改变V的size,即是真正的删除;
b. V.erase(iterator) ,需要输入删除位置的迭代器,删除后,后面的位置的值前移,即删除后迭代器指向的值是被删元素后面的那个值。erase也是真正的删除。
V.erase(iterator1, iterato2), 这个语句则会删除 [(iterator1, iterato2) 区间的所有元素。
c. remove是STL的库函数,但需要删除这个vector中所有指定值的元素时,可以用它。它可以用来删vector里面所有指定值,例如
it_new = std::remove(V.begin(), V.end(), 3); 它会删除V中从[ V.begin(), V.end() )间所有的3.
但它不是真正的删除,只是把3 都挪到了数组的最后面,所以一般与erase配合使用来实现真正的删除:
it_new = std::remove(V.begin(), V.end(), 3);
V.erase(it_new, V.end());
2 C++中添加新元素的方法:push_back(),emplace_back(). insert(), emplace(),
a. push_back() 和 emplace_back() 都是在容器末端添加一个新的元素.
例如有vector V, V.push_back(1); V.emplace_back(1) 都是在 V的末端添加1。由于emplace_back时C++11引入的,效率更高。如果不用考虑兼容以前的版本,优先使用emplace_back();
b. insert()
inser()方法的语法如下,可见inser()一次可以可以插入单个元素;也可以一次插入多个相同元素,甚至可以将别的容器里面的耨个序列插入进来。 所以如果需要需要插入多个元素时,选用insert()方法;
但是如果只是需要插入一个元素,优先使用下面的emplace()方法。
语法格式 | 用法说明 |
iterator insert(pos,elem) | 在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。 |
iterator insert(pos,n,elem) | 在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。 |
iterator insert(pos,first,last) | 在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。 |
iterator insert(pos,initlist) | 在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。 |
c. emplace()
emplace()是C++11才引入的,它一次只能插入一个元素,它的效率要高于insert().因此优先考虑使用它。
emplace()的用法如下:
iterator emplace (const_iterator pos, args...);
例如 V.emplace(V.engin(), 8), 就是在V.begin()的前面插入8。