我在 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/