vector<int> myVector;
Run Code Online (Sandbox Code Playgroud)
并且让我们说向量中的值是这个(按此顺序):
5 9 2 8 0 7
Run Code Online (Sandbox Code Playgroud)
如果我想删除包含值"8"的元素,我想我会这样做:
myVector.erase(myVector.begin()+4);
Run Code Online (Sandbox Code Playgroud)
因为那会抹掉第4个元素.但有没有办法根据值"8"擦除元素?喜欢:
myVector.eraseElementWhoseValueIs(8);
Run Code Online (Sandbox Code Playgroud)
或者我只是需要遍历所有的向量元素并测试它们的值?
如果我有
vector<T> list
Run Code Online (Sandbox Code Playgroud)
如果列表中的每个元素都是唯一的,那么删除元素的最简单方法是什么,只要我不知道它是否在列表中?我不知道元素的索引,我不在乎它是否在列表中.
我有一个Visual Studio 2008 C++ 03应用程序,我有两个标准容器.我想从一个容器中删除另一个容器中存在的所有项目(集合的交集).
这样的事情:
std::vector< int > items = /* 1, 2, 3, 4, 5, 6, 7 */;
std::set< int > items_to_remove = /* 2, 4, 5*/;
std::some_algorithm( items.begin, items.end(), items_to_remove.begin(), items_to_remove.end() );
assert( items == /* 1, 3, 6, 7 */ )
Run Code Online (Sandbox Code Playgroud)
是否存在可以执行此操作的现有算法或模式,还是需要自行编写?
谢谢
我找到了一种从 STL 向量中删除元素及其值的方法:
vec.erase(remove(vec.begin(), vec.end(), value), vec.end());
Run Code Online (Sandbox Code Playgroud)
现在我想知道这个方法的效率如何,即它的时间复杂度(以 Big O 表示法)。
我编写了一个小程序来从向量中删除 0。但是当我检查时,向量中仍然有一个零。为什么?
大小表示它应该是 3 时是 4,但仍然显示为零。
int main()
{
vector<int> nums1 = {1, 2, 3, 0, 0, 0};
for(int i=0; i< nums1.size(); i++)
{
if(nums1[i] == 0)
nums1.erase(nums1.begin() + i);
}
cout << "size is now: " << nums1.size() << endl;
for(int j=0; j<nums1.size(); j++)
cout<< nums1[j] << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)