方法插入到任何stl集合中
method inserting into any stl collection
我想写一个方法,它可以接受一个集合或列表,并在其中插入一个项目。
所以我有
bool getValues(const std::string& query, std::vector<T> *pVals) const {
}
但是我想要的不是std::vector,而是更通用的东西,这样我就可以传递一个向量或集合。某种迭代器?
STL
的工作方式是为要处理的范围的开始和结束接受模板化的迭代器。当需要一般插入元素时,可以使用特殊的插入迭代器。
// accept inserters instead of a container and use a template
// to make it generic (different inserter types)
template<typename InsertIter>
bool getValues(const std::string& query, InsertIter inserter) {
// make sure what you do here works for both vectors and sets
for(int i = 0; i < 6; ++i)
inserter = i; // generic insertion
// ... etc
}
像这样使用
std::vector<int> v;
// vectors use a std::back_inserter (calls push_back())
getValues("", std::back_inserter(v));
std::set<int> s;
// sets use an std::inserter (calls insert())
getValues("", std::inserter(s, s.end()));
如果您想要支持集合,那么迭代器可能是不够的。http://en.cppreference.com/w/cpp/container/set将set的迭代器类型指定为"Constant Bidirectional iterator",这意味着你将无法分配给它。另一个内置类型的候选者是Container,但我找不到任何一种支持插入的Container,它既适用于vector也适用于set。
其基本原因是向量和集合的行为不同。矢量在其元素上定义一个顺序,并支持重复。布景也不行。
如果你愿意忽略这种行为,你可以创建自己的类来实现你想要的。例如,用纯虚拟函数insert(T&item)声明一个类Insertable,然后为要使用的每种容器创建一个从Insertable派生的类。在类的构造函数中获取一个指向这种容器的指针,将其存储为类成员,并重写insert()来定义所需的行为。然后将函数定义为采用Insertable参数,您应该能够将指针传递给任何容器——编译器将为您调用构造函数。
相关文章:
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- STL:在没有输出的情况下处理两个集合
- 是否可以在C STL中获得集合的单个元素
- 更新成员集合使用STL给定输入收集
- 使用STL算法查找集合中的所有匹配项
- 方法插入到任何stl集合中
- 追加到 STL 集合
- 为什么这些C++ STL 无序集合不被视为相等?
- 如何使用 stl 找到不在集合中的最小数字?
- 关于在 c++ 中将文件路径存储在集合 STL 中
- 从C++ STL 集合中获取泛型key_type
- 使用 STL 算法查找集合中的前两个不相邻元素
- 我怎样才能完美地将参数转发到 STL 集合
- STL 集合的插入方法是否复制传递对象的值?
- 使用专用函数对异构集合的 STL 算法
- 在stl集合中设置lower_bound
- 如何在O(logn)中找到stl集合中元素的秩
- stl集合迭代器
- STL集合的去引用迭代器
- c++ STL集合的比较函数:比较函数可以是类的成员函数吗?