亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

基于C++ list中erase與remove函數的使用詳解

2020-01-26 16:06:33
字體:
來源:轉載
供稿:網友
erase的作用是,使作為參數的迭代器失效,并返回指向該迭代器下一參數的迭代器。
如下:
復制代碼 代碼如下:

list ParticleSystem;
list::iterator pointer;
if(pointer->dead == true)
{
   pointer = ParticleSystem.erase(pointer);
}

有一段關于錯誤使用erase的程序
復制代碼 代碼如下:

using namespace std;
int main()
{
  std::listtest_list;
  std::list::iterator test_list_it;
  test_list.push_back(1);
  test_list_it = test_list.begin();
  for(;test_list_it != test_list.end();test_list_it++)
  {
  test_list.erase(test_list_it);
  }
}

問題:該程序不能跳出循環
原因:test_list.erase(test_list_it);每次做erase時都有可能使迭代器失效,test_list_it++就發生錯誤了??梢詤⒁奺ffective stl一書。所有容器做erase操作時都有可能使迭代器失效。
改為:
復制代碼 代碼如下:

for(;test_list_it != test_list.end();)
{
    test_list.erase(test_list_it++);
}

or
復制代碼 代碼如下:

for(;test_list_it != test_list.end();)
{
    std::list::iterator iter_e=test_list_it++;
    test_list.erase(iter_e);
}

注意:
復制代碼 代碼如下:

for(;test_list_it != test_list.end();test_list_it++;) {
    std::list::iterator iter_e=test_list_it;
    test_list.erase(iter_e);
}

這樣仍然是錯誤的,原因是:iter_e=test_list_it 是指針值的復制,它倆其實指向同一個位置,所以iter_e失效那么test_list_it也會失效,所以test_list_it++就會有問題
如果是
復制代碼 代碼如下:

for(;test_list_it != test_list.end();)
{
    std::list::iterator iter_e=test_list_it++;
    test_list.erase(iter_e);
}

則沒有問題。
remove函數也存在erase函數同樣的問題,但remove函數返回值是空,erase返回指向下一個元素的迭代器。

下面是一個簡單的例子。
復制代碼 代碼如下:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <list>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
 printf("------------------------------ Start/n");
 list<int> ls;
 printf("ls.empty() = %d /n", ls.empty());
 printf("ls.max_size() = %d /n", ls.max_size());
 printf("ls.size() = %d /n", ls.size());
 ls.push_back(1);
 ls.push_back(2);
 ls.push_back(3);
 printf("/n--------- after push 1, 2, 3 ---------/n");
 printf("ls.empty() = %d /n", ls.empty());
 printf("ls.max_size() = %d /n", ls.max_size());
 printf("ls.size() = %d /n", ls.size());
 for (list<int>::iterator i = ls.begin(); i != ls.end(); i++) {
  printf("%d, ", *i);
 }
 printf("/n------------------------------/n");
 for (list<int>::iterator i = ls.begin(); i != ls.end(); ) {
  printf("erase %d /n", *i);
  ls.erase(i++);
 }
 printf("/n--------- after erase ---------/n");
 printf("ls.empty() = %d /n", ls.empty());
 printf("ls.max_size() = %d /n", ls.max_size());
 printf("ls.size() = %d /n", ls.size());
 printf("/n------------------------------/n");
 ls.push_back(1);
 ls.push_back(2);
 ls.push_back(3);
 for (list<int>::iterator i = ls.begin(); i != ls.end(); ) {
  printf("remove %d /n", *i);
  ls.remove(*i++);
 }
 printf("/n--------- after remove ---------/n");
 printf("ls.empty() = %d /n", ls.empty());
 printf("ls.max_size() = %d /n", ls.max_size());
 printf("ls.size() = %d /n", ls.size());
 printf("/n------------------------------ End/n");
 getchar();
 return 0;
}

其中:
復制代碼 代碼如下:

 for (list<int>::iterator i = ls.begin(); i != ls.end(); ) {
  printf("erase %d /n", *i);
  ls.erase(i++);
 }

也可以寫成下面的形式,因為erase函數的返回值就是指向下一個元素的迭代器。
復制代碼 代碼如下:

 for (list<int>::iterator i = ls.begin(); i != ls.end(); ) {
  printf("erase %d /n", *i);
  i = ls.erase(i);
 }

輸出結果如下:
------------------------------ Start
ls.empty() = 1
ls.max_size() = 1073741823
ls.size() = 0
--------- after push 1, 2, 3 ---------
ls.empty() = 0
ls.max_size() = 1073741823
ls.size() = 3
1, 2, 3,
------------------------------
erase 1
erase 2
erase 3
--------- after erase ---------
ls.empty() = 1
ls.max_size() = 1073741823
ls.size() = 0
------------------------------
remove 1
remove 2
remove 3
--------- after remove ---------
ls.empty() = 1
ls.max_size() = 1073741823
ls.size() = 0
------------------------------ End
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲私人国产精品va| 欧美三级欧美成人高清www| 国产有码一区二区| 2018中文字幕一区二区三区| 国产精品男人爽免费视频1| 国产精品三级网站| 国产精品第七十二页| 欧美成人黄色小视频| 国产精品免费视频xxxx| 国产性色av一区二区| 久久久噜久噜久久综合| 亚洲香蕉成人av网站在线观看| 亚洲精品电影网站| 成人欧美一区二区三区在线湿哒哒| 欧美激情中文字幕乱码免费| 午夜精品一区二区三区在线播放| 91丨九色丨国产在线| 黑人狂躁日本妞一区二区三区| 精品中文字幕在线2019| 国产丝袜一区二区三区免费视频| 97福利一区二区| 精品欧美国产一区二区三区| 欧美中文字幕视频| 国产精品亚发布| 97香蕉久久超级碰碰高清版| 91在线视频精品| 97色在线视频观看| 668精品在线视频| 欧美成人午夜激情视频| 国产99久久精品一区二区 夜夜躁日日躁| 欧美激情欧美激情在线五月| 亚洲欧洲一区二区三区在线观看| 国产热re99久久6国产精品| 欧美在线精品免播放器视频| 91视频-88av| 欧美wwwwww| 国产精品爽爽ⅴa在线观看| 午夜精品一区二区三区av| 久久久久久中文字幕| 亚洲精品国产拍免费91在线| 久久综合久久八八| 4444欧美成人kkkk| 91伊人影院在线播放| 热久久免费国产视频| 精品久久久久久久久久久久久久| 成人精品网站在线观看| 久久99国产精品自在自在app| 欧美日韩国产激情| 亚洲精品国产精品国产自| 亚洲美女视频网站| 日韩大陆欧美高清视频区| 欧美极品少妇xxxxⅹ喷水| 欧美成人h版在线观看| 伦伦影院午夜日韩欧美限制| 国产日韩精品在线播放| 丝袜亚洲欧美日韩综合| 亚洲国产欧美一区二区三区久久| 欧美日韩国产精品一区二区不卡中文| 国产精品一区二区在线| 中文字幕av日韩| 欧美网站在线观看| 欧洲s码亚洲m码精品一区| **欧美日韩vr在线| 久久精品91久久香蕉加勒比| 亚洲国产高清高潮精品美女| 久久久久久噜噜噜久久久精品| www.欧美精品一二三区| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩爱爱视频| 亚洲精美色品网站| 亚洲综合成人婷婷小说| 亚洲欧美日韩国产中文| 久久男人的天堂| 九九热这里只有精品免费看| 亚洲欧美综合v| 国产精品99一区| 情事1991在线| 性欧美长视频免费观看不卡| 国产成人精品一区二区三区| 久久久精品视频在线观看| 欧美日韩美女在线观看| 国产精品老女人视频| 国产一区二区三区精品久久久| 国产精品一区久久| 亚洲欧美日韩视频一区| 亚洲视频一区二区| 韩国三级电影久久久久久| 成人天堂噜噜噜| 国产精品旅馆在线| 91精品视频免费看| 日韩av男人的天堂| 亚洲激情视频网| 这里只有精品在线播放| 国产精欧美一区二区三区| 欧洲亚洲在线视频| 色777狠狠综合秋免鲁丝| 6080yy精品一区二区三区| 国产美女被下药99| 欧美日韩精品在线播放| 国产在线久久久| 亚洲精品动漫久久久久| 美女999久久久精品视频| 日韩免费电影在线观看| 久久精品中文字幕电影| 久久久久久国产精品三级玉女聊斋| 色琪琪综合男人的天堂aⅴ视频| 97免费中文视频在线观看| 欧美精品日韩www.p站| 国产精品久久久久久av| 国产精品三级网站| 亚洲最新中文字幕| 亚洲成色777777在线观看影院| 国产日产久久高清欧美一区| 国产精品老牛影院在线观看| 欧美国产日产韩国视频| 欧美激情日韩图片| 中文字幕精品一区二区精品| 精品久久香蕉国产线看观看gif| 91亚洲人电影| 97国产精品视频| 日韩视频免费观看| 国产精品看片资源| 国产欧美一区二区| 96sao精品视频在线观看| 日韩在线播放一区| 国产精品欧美激情| 最新91在线视频| 最近的2019中文字幕免费一页| 欧美亚洲另类激情另类| 黑人极品videos精品欧美裸| 欧美黄色免费网站| 国产精品视频99| 欧美国产精品人人做人人爱| 91视频8mav| 欧美黑人极品猛少妇色xxxxx| 成人av在线亚洲| 亚洲aa中文字幕| 亚洲女人天堂成人av在线| 91麻豆国产语对白在线观看| 国产精品色婷婷视频| 国产乱肥老妇国产一区二| 欧美电影在线观看完整版| 黄色精品在线看| 亚洲精品电影在线| 91大神福利视频在线| 久久久精品一区二区| 国产精品视频在线播放| 91精品久久久久久久久久入口| 中文字幕成人精品久久不卡| 亚洲a一级视频| 亚洲人成在线电影| 国产精品久久婷婷六月丁香| 少妇久久久久久| 美女av一区二区| 日韩av在线电影网| 伊人久久五月天| 国产999在线| 久久久久亚洲精品成人网小说| 久久久综合免费视频| 91久久嫩草影院一区二区| 国产精品中文在线| 中文字幕亚洲无线码a| 国产精品久久久av久久久| 日韩欧美主播在线|