我想修改向量类的成员函数。这可能吗?例如,我希望能够删除值,而不是向量的整数。
问问题
331 次
1 回答
2
我认为这可以满足您的需求。此示例使用 删除向量中所有出现的数字 6 std::remove
。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());
}
于 2015-04-16T11:16:00.457 回答