使用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次在效率上沒有什么區別,只是代碼上方便一些。

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
// pnlist指向要刪除的元素,然后如下代碼即可刪除該元素(但此方法不能刪除最后一個元素)
nlist.erase(pnlist);
加入你要刪除第n個元素,則可以通過以下方法將pnlist指向該元素:
for(int i = 0; i < n && pnlist != nlist.end(); ++i)
pnlist++;

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);
這樣就可以找到那個節點,就是麻煩了點
- 3 回答
- 0 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消