我认为这可以满足您的需求。此示例使用std::remove 从向量中删除所有出现的数字 6。 xs.erase 是为了确保向量移除元素并将向量缩小到新的大小。
我通常会避免修改 STL 容器,因为在这类事情上实现它们的人可能比我聪明得多。我建议你学习标准库算法,一般有一种适合大多数通用容器操作。
#include <iostream>
#include <algorithm>
int main(int argc, char** argv)
{
std::vector<int> xs{1, 3, 6, 2, 6, 5};
std::cout << "xs size: " << xs.size() << std::endl; // xs.size() == 6
auto value_to_remove = 6;
xs.erase(std::remove(xs.begin(), xs.end(), value_to_remove), xs.end());
for (const auto& x : xs)
std::cout << x << ", ";
std::cout << std::endl; // 1, 3, 2, 5,
std::cout << "xs size: " << xs.size() << std::endl; // xs.size() == 4
return 0;
}
在这种情况下,与大多数其他 STL 算法一样,value_to_remove 可以替换为(一元)lambda 谓词,从而开启了一个充满异国情调的价值发现世界。
您可以将上述内容包装在一个函数中,如下所示:
template <typename T>
void erase_by_value(std::vector<T>& xs, const T& value_to_remove)
{
xs.erase(std::remove(xs.begin(), xs.end(), value_to_remove), xs.end());
}