C++ 修改STL c+中的向量类+;,这可能吗?

C++ 修改STL c+中的向量类+;,这可能吗?,c++,vector,stl,self-modifying,C++,Vector,Stl,Self Modifying,我想修改vector类的一个成员函数。这可能吗?例如,我希望能够删除与值有关的内容,而不是向量的整数。我认为这就是您要查找的内容。此示例使用std::remove从向量中删除所有出现的数字6xs.erase用于确保向量删除元素并将向量收缩为新大小 我通常避免修改STL容器,因为在这类事情上,实现它们的人可能比我聪明得多。我建议您学习标准库算法,通常有一种适合大多数类型的一般容器操作 #include <iostream> #include <algorithm> int

我想修改vector类的一个成员函数。这可能吗?例如,我希望能够删除与值有关的内容,而不是向量的整数。

我认为这就是您要查找的内容。此示例使用
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;
}

为什么要这样做?嗨@Matias欢迎来到stack overflow这个问题以前被问过。只需使用谷歌或网站的搜索栏进行搜索。哪一个,做什么,为什么?更好的方法是查看算法库。看见您可能已经有了一个函数。使用
标题有什么问题?
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());

}