国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【c++】list迭代器失效問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了【c++】list迭代器失效問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、list iterator的使用

二、list的迭代器失效


一、list iterator的使用

? ? ? ? 對(duì)于list的迭代器的用法,可以將它看做一個(gè)指針(實(shí)際要更加復(fù)雜)來(lái)使用,該指針指向list中的一個(gè)節(jié)點(diǎn)。

【c++】list迭代器失效問(wèn)題,c++,開(kāi)發(fā)語(yǔ)言

? ? ? ? 【注意】

? ? ? ? (1)begin和end為正向迭代器,對(duì)迭代器執(zhí)行++操作,迭代器向后移動(dòng)

? ? ? ? (2)rbegin和rend是反向迭代器,對(duì)迭代器執(zhí)行++操作,迭代器向前移動(dòng)

【c++】list迭代器失效問(wèn)題,c++,開(kāi)發(fā)語(yǔ)言

二、list的迭代器失效

? ? ? ? list的迭代器失效即迭代器所指向的節(jié)點(diǎn)被刪除掉了。list是帶哨兵位頭節(jié)點(diǎn)的雙向循環(huán)鏈表,在list中進(jìn)行插入節(jié)點(diǎn)不會(huì)導(dǎo)致list的迭代器失效,只有刪除節(jié)點(diǎn)時(shí)才會(huì)出現(xiàn)失效問(wèn)題,并且失效的只是指向被刪除節(jié)點(diǎn)的迭代器,其他迭代器不受影響。

//list迭代器失效測(cè)試案例
void Test1()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	list<int> l(arr, arr + sizeof(arr) / sizeof(arr[0]));
	list<int>::iterator it = l.begin();
	cout << *it << endl;
	while (it != l.end())
	{
		l.erase(it);	
		it++;	//erase()函數(shù)執(zhí)行后,it所指向的節(jié)點(diǎn)已被刪除,導(dǎo)致it失效,所以不能再對(duì)it進(jìn)行++操作
	}
}

? ? ? ? ?上面測(cè)試代碼調(diào)試觸發(fā)異常:"cannot increment value-initialized list iterator",(即迭代器失效)

【c++】list迭代器失效問(wèn)題,c++,開(kāi)發(fā)語(yǔ)言

? ? ? ? list.erase()的返回值是指向帶刪除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的迭代器,所以為避免迭代器失效,針對(duì)上述測(cè)試代碼可以做以下修改:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819401.html

void Test2()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	list<int> l(arr, arr + sizeof(arr) / sizeof(arr[0]));
	list<int>::iterator it = l.begin();
	
	while (it != l.end())
	{
		cout << *it << endl;
		l.erase(it++);	//等價(jià)于it=l.erase(it)  即用it來(lái)接收指向下一個(gè)節(jié)點(diǎn)的迭代器
		//erase()返回的是指向待刪除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的迭代器
	}
}

到了這里,關(guān)于【c++】list迭代器失效問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++進(jìn)階(三)】STL大法--vector迭代器失效&深淺拷貝問(wèn)題剖析

    【C++進(jìn)階(三)】STL大法--vector迭代器失效&深淺拷貝問(wèn)題剖析

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門到精通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)C++ ? ???? 在閱讀本篇文章前,一定要先看前集: vector深度剖析(上) 本章重點(diǎn): 本章會(huì)重點(diǎn)講解vector迭代器失效問(wèn)題 以及vector中的深淺拷貝問(wèn)題 并且簡(jiǎn)

    2024年02月11日
    瀏覽(47)
  • 【C++進(jìn)階(四)】STL大法--list深度剖析&list迭代器問(wèn)題探討

    【C++進(jìn)階(四)】STL大法--list深度剖析&list迭代器問(wèn)題探討

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門到精通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)C++ ? ???? 本質(zhì)重點(diǎn): 本章重點(diǎn)講解list的接口函數(shù)的熟悉 并且講解list迭代器失效的特性 最后講解迭代器的功能分類以及 算法庫(kù)函數(shù)中誰(shuí)能用誰(shuí)不能

    2024年02月09日
    瀏覽(54)
  • STL之list模擬實(shí)現(xiàn)(反向迭代器講解以及迭代器失效)

    這次是關(guān)于list的模擬實(shí)現(xiàn)的代碼,先看看下面的代碼: 上面是list的代碼,其底層是一個(gè)帶頭雙向循環(huán)的鏈表,實(shí)現(xiàn)的方法就不說(shuō)了,相信大家已經(jīng)都會(huì)了,然后自己實(shí)心的list我沒(méi)有寫析構(gòu)函數(shù)等,這個(gè)也很簡(jiǎn)單,循環(huán)利用成員函數(shù)中的刪除函數(shù)就可以。 先來(lái)說(shuō)說(shuō)個(gè)人認(rèn)為

    2024年02月11日
    瀏覽(19)
  • 【C++】vector模擬實(shí)現(xiàn)+迭代器失效

    【C++】vector模擬實(shí)現(xiàn)+迭代器失效

    鐵汁們,今天給大家分享一篇vector模擬實(shí)現(xiàn) + 迭代器失效,來(lái)吧,開(kāi)造?? 指向最后一個(gè)空間的下一個(gè)位置 ?? iterator _endofstorage 指向存儲(chǔ)第一個(gè)有效數(shù)據(jù)空間的位置 ?? iterator _start 指向存儲(chǔ)最后一個(gè)有效數(shù)據(jù)空間的下一個(gè)位置 ?? iterator _finish 在成員變量聲明處給缺省值,

    2024年02月21日
    瀏覽(86)
  • 【C++】list基本接口+手撕 list(詳解迭代器)

    【C++】list基本接口+手撕 list(詳解迭代器)

    父母就像迭代器,封裝了他們的脆弱......? 手撕list目錄: 一、list的常用接口及其使用 1.1list 構(gòu)造函數(shù)與增刪查改 1.2list 特殊接口 1.3list 排序性能分析 二、list 迭代器實(shí)現(xiàn)(重點(diǎn)+難點(diǎn)) 關(guān)于迭代器的引入知識(shí): 2.1迭代器的分類 2.2?list 迭代器失效問(wèn)題(和vector有差異) 2.3

    2024年02月08日
    瀏覽(18)
  • 【C++】手撕 list類(包含迭代器)

    【C++】手撕 list類(包含迭代器)

    目錄 1,list的介紹及使用 2,list_node 3,list_node() 3,list 4,list() 5,push_back(const T x) 6,print() 7,_list_iterator 8,operator*() 9,begin() 10,end() 11,operator-() 12,operator++() 13,operator++(int) 14,operator--() 15,operator--(int) 16,operator==(const sefl s) 17,operator!=(const sefl s) 18,_list_const_iterator

    2024年02月02日
    瀏覽(18)
  • C++:模擬實(shí)現(xiàn)list及迭代器類模板優(yōu)化方法

    C++:模擬實(shí)現(xiàn)list及迭代器類模板優(yōu)化方法

    本篇模擬實(shí)現(xiàn)簡(jiǎn)單的list和一些其他注意的點(diǎn) 如下所示是利用拷貝構(gòu)造將一個(gè)鏈表中的數(shù)據(jù)挪動(dòng)到另外一個(gè)鏈表中,構(gòu)造兩個(gè)相同的鏈表 lt作為形參,傳引用可以提高傳參的效率,同時(shí)應(yīng)該加上const修飾來(lái)保證不會(huì)因?yàn)椴恍⌒男薷牧诵螀?dǎo)致外部的實(shí)參也被修改,這樣的結(jié)果是

    2024年02月13日
    瀏覽(20)
  • C++:關(guān)于模擬實(shí)現(xiàn)vector和list中迭代器模塊的理解

    C++:關(guān)于模擬實(shí)現(xiàn)vector和list中迭代器模塊的理解

    本篇是關(guān)于 vector 和 list 的模擬實(shí)現(xiàn)中,關(guān)于迭代器模塊的更進(jìn)一步理解,以及在前文的基礎(chǔ)上增加對(duì)于反向迭代器的實(shí)現(xiàn)和庫(kù)函數(shù)的對(duì)比等 本篇是寫于前面模擬實(shí)現(xiàn)的一段時(shí)間后,重新回頭看迭代器的實(shí)現(xiàn),尤其是在模板角度對(duì) list 中迭代器封裝的部分進(jìn)行解析,希望可以

    2024年02月07日
    瀏覽(22)
  • C++之std::list<string>::iterator迭代器應(yīng)用實(shí)例(一百七十九)

    C++之std::list<string>::iterator迭代器應(yīng)用實(shí)例(一百七十九)

    簡(jiǎn)介: CSDN博客專家,專注Android/Linux系統(tǒng),分享多mic語(yǔ)音方案、音視頻、編解碼等技術(shù),與大家一起成長(zhǎng)! 優(yōu)質(zhì)專欄: Audio工程師進(jìn)階系列 【 原創(chuàng)干貨持續(xù)更新中…… 】?? 人生格言: 人生從來(lái)沒(méi)有捷徑,只有行動(dòng)才是治療恐懼和懶惰的唯一良藥. 更多原創(chuàng),歡迎關(guān)注:An

    2024年02月12日
    瀏覽(26)
  • 【C++】反向迭代器的模擬實(shí)現(xiàn)通用(可運(yùn)用于vector,string,list等模擬容器)

    【C++】反向迭代器的模擬實(shí)現(xiàn)通用(可運(yùn)用于vector,string,list等模擬容器)

    ??博客主頁(yè): 主頁(yè) ??系列專欄: C++ ??感謝大家點(diǎn)贊??收藏?評(píng)論?? ??期待與大家一起進(jìn)步! 我們要寫出一個(gè)通用的反向迭代器模擬而且在保證代碼簡(jiǎn)介不繁瑣的的情況下,一定程度上使用我們自己模擬的已經(jīng)封裝好的iterator迭代器可以簡(jiǎn)化許多步驟,首先我們要知

    2024年02月14日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包