假设我有一个向量
有没有一种特定的方法可以从向量中弹出
v
,它有三个元素:{1,2,3}
。有没有一种特定的方法可以从向量中弹出
2
,使得结果向量变为{1,3}
。//erase the i-th element
myvector.erase (myvector.begin() + i);
(将向量中的第一个元素计数为i = 0
)
2
的元素,而不是索引2
处的值。 #include<vector>
#include<algorithm>
int main(){
std::vector<int> a={1,2,3};
a.erase(std::find(a.begin(),a.end(),2));
}
我使用了 C++0x 来避免某些样板代码,但实际上使用 std::find
和 vector::erase
并不需要 C++0x。
std :: set
或std :: unsorted_set
。 - Ken Bloomstd::erase
来删除多个元素。
(不需要使用“erase-remove idiom”)#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1,2,2,3,4,5};
std::erase(v, 2);
for(auto e : v) std::cout << e << " ";
std::cout << '\n';
// output: 1 3 4 5
}
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
unsigned int i;
vector<unsigned int> myvector;
// set some values (from 1 to 10)
for (i=1; i<=10; i++) myvector.push_back(i);
// erase the 6th element
myvector.erase (myvector.begin()+5);
// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);
cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
cout << " " << myvector[i];
cout << endl;
return 0;
}
pop
按索引删除一个项目(Todd的回答),而remove
按值删除一个项目(我的回答)。 - Ken Bloom