STL List和Deque在删除元素时的区别
来源:互联网 发布:淘宝smastudio是谁的店 编辑:程序博客网 时间:2024/06/05 21:34
在STL容器的操作中,往往需要遍历删除某些元素,本文将给出如何遍历删除元素的快速方法。同时说明List和Deque删除元素的区别。
至于List和Deque,甚至Vector的区别,读者自行去了解,网上很多解释。这里只说明迭代器的区别,让大家快速正确的使用STL容器。
List在Erase后,迭代器仍然可以使用;Deque在Erase后,队列结果发生了变化,迭代器将与之不兼容,执行会报错。STL容器删除元素后,会返回一个迭代器,此迭代器指向当前删除元素的后继元素或是end(),可以通过此方法解决deque的遍历删除报错问题。上代码:
#include "stdafx.h"#include <string>#include <iostream>#include <list>#include <deque>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ // 1.list的遍历删除,正确运行 list<string> list; list.push_back("H"); list.push_back("E"); list.push_back("?"); list.push_back("L"); list.push_back("L"); list.push_back("?"); list.push_back("?"); list.push_back("O"); list.push_back("?"); list.push_back("?"); std::list<string>::iterator listIter = list.begin(); for (; listIter != list.end();) { if ("?" != *listIter) { ++listIter; } else { list.erase(listIter++); } } for (listIter = list.begin(); listIter != list.end(); ++listIter) { std::cout << " " << *listIter << " "; } //// 2.deque的遍历删除,将报错 //std::deque<string> deque; //deque.push_back("H"); //deque.push_back("E"); //deque.push_back("?"); //deque.push_back("L"); //deque.push_back("L"); //deque.push_back("?"); //deque.push_back("?"); //deque.push_back("O"); //deque.push_back("?"); //deque.push_back("?"); //std::deque<string>::iterator dequeIter = deque.begin(); //for (; dequeIter != deque.end();) //{ // if ("?" != *dequeIter) // { // ++dequeIter; // } // else // { // deque.erase(dequeIter++); // } //} //for (dequeIter = deque.begin(); dequeIter != deque.end(); ++dequeIter) //{ // std::cout << " " << *dequeIter << " "; //} // 3.deque的遍历删除,正确运行 std::deque<string> deque; deque.push_back("H"); deque.push_back("E"); deque.push_back("?"); deque.push_back("L"); deque.push_back("L"); deque.push_back("?"); deque.push_back("?"); deque.push_back("O"); deque.push_back("?"); deque.push_back("?"); std::deque<string>::iterator dequeIter = deque.begin(); for (; dequeIter != deque.end();) { if ("?" != *dequeIter) { ++dequeIter; } else { dequeIter = deque.erase(dequeIter); } } for (dequeIter = deque.begin(); dequeIter != deque.end(); ++dequeIter) { std::cout << " " << *dequeIter << " "; } system("pause"); return 0;}
阅读全文
0 0
- STL List和Deque在删除元素时的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- STL中vector、list、deque和map的区别
- stl中的vector,list deque和map的区别
- Pat(A) 1093. Count PAT's (25)
- 做到这一点,你也可以成为优秀的程序员
- JAVA多线程
- hdfs下载copyToLocalFile报NullPointerException解决方法
- 深入理解ES6 --解构
- STL List和Deque在删除元素时的区别
- 基于梯度的优化方法
- C语言qsort的用法和使用
- 经典算法题之Maximal Square
- 如何抓取淘宝上的商品信息和详情页信息
- HDU
- HTTP请求报文和HTTP响应报文
- Paint画笔的基本使用——渲染
- Spring Boot(Web)初探二( 配置文件)