c++ - 多态处理 vector 和hash_set的函数

标签 c++ stl vector polymorphism hashset

我在 C++ 中有一个函数,它接受一个 vector 并将一些项目推到它上面。例如:

void MyFunction(vector<int>* output);

我想修改它以便现在能够获取 vector hash_set。在 Java 中,这很容易,只需更改函数以获取 Collection(公共(public)接口(interface))即可。 MyFunction 所做的就是将元素放入给定的容器中,因此它不必关心该容器是 vector 还是 hash_set,只需要关心“插入”元素的一些概念.

感谢您的帮助!

最佳答案

他在制作直接模板时遇到了一个小问题。 Vector通常使用push_back,而hash_set则使用insert。

使用模板,但使用插入函数并在 .end() 元素处插入,以便 vector 保持快速操作 - 这是您的最佳选择。如果它将插入位置作为位置提示,您仍然会稍微减慢哈希集的速度(尽管它会起作用)。

使用 insert(iter, val),通过在迭代器位置的元素之前插入新元素来扩展容器。对于序列容器( vector )来说是这样,而关联容器(hash_set)只会使用位置作为提示 - 但插入仍然可以正常工作。下面的函数可用于将值 U 插入任何支持插入的容器(所有 STL 都支持插入),假设 U 与 vector 元素类型相同或隐式可转换为 vector 元素类型。

template <typename T, typename U>
void InsertToContainer(T& container, U val)
{
    container.insert(container.end(), val);
}

关于c++ - 多态处理 vector 和hash_set的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338886/

相关文章:

c++ - MFC/CCriticalSection : Simple lock situation hangs

c++ - 使用 CMake 打开链接器标志

c++ - iterator_trait 的典型用例是什么

c++ - 在头文件中初始化一个字符串 vector

c# - 什么是 C++ 中拼接的 C# 替代方案

c++ - 如何设置此数组的大小 C++

c++ - std::transform 一元操作签名

c++ - std::vector::push_back 的成本是成功还是无效?

java - 将 HashMap 键值 (String) 转换为 Vector <String>?

java - 如何从外部java类获取ResultSet