在STL c++中修改向量class,这可能吗?
Modify the vector class in STL c++, is this possible?
我想修改向量的一个成员函数class。这可能吗?例如,我希望能够删除值,而不是向量的整数。
我认为这符合您的要求。此示例使用 std::remove
从向量中删除所有出现的数字 6。 xs.erase
是为了确保vector移除元素并将vector缩小到新的大小。
我通常避免修改 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());
}
我想修改向量的一个成员函数class。这可能吗?例如,我希望能够删除值,而不是向量的整数。
我认为这符合您的要求。此示例使用 std::remove
从向量中删除所有出现的数字 6。 xs.erase
是为了确保vector移除元素并将vector缩小到新的大小。
我通常避免修改 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());
}