list和vector都可以使用erase函數(shù)移除指定下標(biāo)的元素,注意輸入的是迭代器,返回值為指向下一個元素的位置。:
iterator erase(iterator position);
iterator erase(iterator first,iterator last);
如果下標(biāo)是index,直接調(diào)用即可:文章來源:http://www.zghlxwxcb.cn/news/detail-674439.html
list.erase(list.begin() + index);
如果根據(jù)下標(biāo)一次性刪除多個元素,則會發(fā)生錯誤,因?yàn)閯h除一個元素后,元素個數(shù)會發(fā)生變化,因此下標(biāo)就會出現(xiàn)錯誤,正確代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-674439.html
#include <vector>
#include <list>
#include <iostream>
using namespace std;
bool sort_desc(int a, int b)
{
return a > b;
}
int main(int argc, char *argv[])
{
list<int> mylist;
mylist.push_back(5);
mylist.push_back(8);
mylist.push_back(9);
mylist.push_back(2);
mylist.push_back(4);
mylist.push_back(6);
list<int> index;
index.push_back(1);
index.push_back(3);
index.push_back(4);
index.sort(sort_desc);//對下標(biāo)數(shù)組進(jìn)行降序
for(list<int>::iterator iter=index.begin(); iter!=index.end(); iter++)
{
list<int>::iterator delIter=mylist.begin();
advance(delIter, *iter);//按照由大到小的下標(biāo)順序進(jìn)行刪除元素,這樣被刪除元素的下標(biāo)是永遠(yuǎn)不會變的
mylist.erase(delIter);
}
for(list<int>::iterator iter=mylist.begin(); iter!=mylist.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;
return 0;
}
到了這里,關(guān)于std::list和std::vector刪除指定下標(biāo)的元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!