亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問我該如何才能解決了這個問題?

請問我該如何才能解決了這個問題?

C++
森欄 2023-04-22 17:13:32
使用C++中的list容器,假設定義了一個list<int> nlist(30);和迭代器list<int>::iterator pnlist = nlist.begin(); 現在我想刪除nlist中的第i個元素如何刪除?我寫的是nlist.erase(pnlisr+i);但是報錯,原因是一個整型的i不能跟nlist直接相加。
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

list<int> nlist(30);list<int>::iterator pnlist = nlist.begin();advance(pnlisr,i);//迭代器前進i個元素,注意i是從0開始if(pnlisr!=nlist.end())//最后一個不能刪除    nlist.erase(pnlisr);//刪除第i個元素

其實advance這個輔助函數,對你的迭代器的復雜度是O(N),和使用++操作符步進i次在效率上沒有什么區別,只是代碼上方便一些。


查看完整回答
反對 回復 2023-04-25
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

// pnlist指向要刪除的元素,然后如下代碼即可刪除該元素(但此方法不能刪除最后一個元素)
nlist.erase(pnlist); 

加入你要刪除第n個元素,則可以通過以下方法將pnlist指向該元素:
for(int i = 0; i < n && pnlist != nlist.end(); ++i)
pnlist++;

查看完整回答
反對 回復 2023-04-25
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

可以這樣寫
list<int>:iterator pt = pnlist;
for(int j = 0; pt != nlist.end(), j != i; pt = pt->next ) ;
nlist.erase(pt);
這樣就可以找到那個節點,就是麻煩了點

查看完整回答
反對 回復 2023-04-25
  • 3 回答
  • 0 關注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號