如果我有
vector<T> list
如果列表中的每个元素都是唯一的,那么最简单的删除一个元素的方法是什么?我不知道它是否在列表中,也不知道它的索引,而且如果它不在列表中,我也不关心。
std::vector<int> v;
// fill it up somehow
v.erase(std::remove(v.begin(), v.end(), 99), v.end());
// really remove all elements with value 99
如果你确定它是唯一的,那么就遍历这个向量并删除找到的元素。类似于以下代码:for( std::vector<T>::iterator iter = v.begin(); iter != v.end(); ++iter )
{
if( *iter == VALUE )
{
v.erase( iter );
break;
}
}
for (int i = v.size()-1; i >= 0; i--) if (v[i] == VALUE) v.erase(v.begin()+i);
。 - bobobobotemplate<typename T>
inline void remove(vector<T> & v, const T & item)
{
v.erase(std::remove(v.begin(), v.end(), item), v.end());
}
并像这样使用它
remove(myVector, anItem);
如果每个元素都是唯一的,那么应该使用std::set<T>
而不是std::vector<T>
。
这样做还有一个好处,即具有erase
成员函数,可以实现你想要的功能。
看看使用正确的容器为任务提供了更多表达工具?
#include <set>
#include <iostream>
int main()
{
std::set<int> notAList{1,2,3,4,5};
for (auto el : notAList)
std::cout << el << ' ';
std::cout << '\n';
notAList.erase(4);
for (auto el : notAList)
std::cout << el << ' ';
std::cout << '\n';
}
// 1 2 3 4 5
// 1 2 3 5
从C++20开始
//LIKE YOU MENTIONED EACH ELEMENT IS UNIQUE
std::vector<int> v = { 2,4,6,8,10 };
//C++20 UNIFORM ERASE FUNCTION (REMOVE_ERASE IDIOM IN ONE FUNCTION)
std::erase(v, 8); //REMOVES 8 FROM VECTOR
std::erase(v, 12);
不会发生任何事情,向量保持完整。
vector
容器的名称是list
?这可能会让人感到困惑,尤其是对于阅读你的代码的人来说。 - Kiril Kirovvector
一样。但两者非常不同 :) - Kiril Kirov