-2

我想修改向量类的成员函数。这可能吗?例如,我希望能够删除值,而不是向量的整数。

4

1 回答 1

2

我认为这可以满足您的需求。此示例使用 删除向量中所有出现的数字 6 std::removexs.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 回答