STL常用技巧
来源:互联网 发布:明天妈妈不在知乎 编辑:程序博客网 时间:2024/06/06 05:39
1,删除一个元素
比如:vector vecID; 中保存了m个ID,这时要删除第n个ID。
遍历是一个方法;即vector::itertor it = vecID.begin(); 然后++it n次。
更好的方法是:vector::itertor it = vecID.begin() + n; vector的迭代器直接支持这种偏移。
然后用vecID.erase(it)方法 删除该元素。
2.去除一个容器中有特定值的所有对象
1)如果容器是vector、string或deque,使用erase-remove惯用法,例如
c.erase(remove(c.begin(), c.end(), 1963),c.end());
2)如果容器是list,使用list.remove
// 当c是list时,remove成员函数是去除特定值的元素的最佳方法
c.remove(1963);
3)如果容器是标准关联容器,使用它的erase成员函数,例如:
// 当c是标准关联容器时,erase成员函数是去除特定值的元素的最佳方法
c.erase(1963);
3.去除一个容器中满足一个特定判定式的所有对象
bool badValue(int x); // 函数定义:返回x是否是“bad”
o 如果容器是vector、string或deque,使用erase-remove_if惯用法:
// 当c是vector、string或deque时这是去掉badValue返回真的对象的最佳方法
c.erase(remove_if(c.begin(), c.end(), badValue),c.end());
o 如果容器是list,使用list.remove_if:
// 当c是list时这是去掉badValue返回真的对象的最佳方法
c.remove_if(badValue);
o 如果容器是标准关联容器,使用remove_copy_if和swap。
o 如果需要写一个循环遍历容器元素erase,注意iterator的递增逻辑
// 错误代码:当容器的一个元素被删时,指向那个元素的所有迭代器都失效了
AssocContainer<int> c;
// 不要这么做!
for (AssocContainer<int>::iterator i = c.begin(); i!= c.end(); ++i)
{
if (badValue(*i))
{
c.erase(i);
}
}
// 正确代码:
AssocContainer<int> c;
// for循环的第三部分是空的,i在后面自增。
for (AssocContainer<int>::iterator i = c.begin(); i != c.end();)
{
if (badValue(*i))
{
i = c.erase(i); //仅适用序列容器,关联容器用c.erase(i++); 因关联容器erase 返回void,
}
else
{
++i;
}
}(#add 妙哉)
- STL常用技巧
- STL技巧
- STL常用
- STL常用
- 常用STL
- 常用stl
- STL 使用技巧
- STL 使用技巧
- STL 使用技巧
- STl-traits编程技巧
- [技巧]using STL
- stl一些技巧积累
- STL及各种技巧
- stl--string 实践技巧
- 常用技巧
- 常用技巧
- 常用技巧
- 常用技巧
- Java学习之路——用dom4j解析xml
- java中list、set和map 的区别
- 函数对象/仿函数
- 编程期间休息片刻的好处
- linux进程控制
- STL常用技巧
- pinyin4j的使用
- OOD三个设计原则:SRP(单一职责原则)、OCP(开闭原则)、LSP(Liskov替换原则)
- (文章)AC上路的目录
- map按值排序
- Oracle 创建序列
- (文章)图论的目录
- replace()与replaceAll()的区别
- STL中常用的一些算法函数[持续更新]