用于展平容器容器的泛型函数
Generic function to flatten a container of containers
我正在努力更好地掌握迭代器和泛型函数。我认为编写一个将container1 < container2 <type> >
转换为container3 <type>
的函数将是一个有用的练习。例如,它应该能够将vector< deque<int> >
转换为list<int>
。
我认为所有的容器访问都应该通过迭代器,就像<algorithm>
中的函数一样。
这是我的代码:
#include <iterator>
#include <algorithm>
// COCiter == Container of Containers Iterator
// Oiter == Output Iterator
template <class COCiter, class Oiter>
void flatten (COCiter start, COCiter end, Oiter dest)
{
using namespace std;
while (start != end) {
dest = copy(start->begin(), start()->end(), dest);
++start;
}
}
但当我尝试用以下代码调用它时:
int main ()
{
using namespace std;
vector< vector<string> > splitlines;
vector<string> flat;
/* some code to fill SPLITLINES with vectors of strings */
flatten(splitlines.begin(), splitlines.end(), back_inserter(flat));
}
我收到一条巨大的C++模板错误消息,undefined reference to void flatten< ... pages of templates ...
我觉得我的代码太容易写了,我必须需要更多的东西来确保内部容器中的数据类型与输出容器中的类型匹配。但我不知道该怎么办。
我发现了这个问题。由于SFINAE(替换失败不是错误),您的编译器找不到正确的模板,因为您正试图通过键入start()
(可能是拼写错误)在start
上调用operator()
。试试这个:
#include <iterator>
#include <algorithm>
// COCiter == Container of Containers Iterator
// Oiter == Output Iterator
template <class COCiter, class Oiter>
void flatten (COCiter start, COCiter end, Oiter dest) {
while (start != end) {
dest = std::copy(start->begin(), start->end(), dest);
++start;
}
}
std::accumulate
可以为您做到这一点。您需要将每个内部向量的内容聚集到外部向量中。
vector<vector<int>> v_of_v;
vector<int> v = std::accumulate(
v_of_v.begin(), v_of_v.end(),
vector<int>(),
[](vector<int> a, vector<int> b) {
a.insert(a.end(), b.begin(), b.end());
return a;
});
相关文章:
- 链表的泛型函数remove()与成员函数remove)
- 以特征类型作为参数的泛型函数回调
- 传递非泛型函数的最有效方法是什么?
- 泛型函数反向打印任何矢量,编译器出错
- 是否可以在C++中创建泛型函数指针?
- 将泛型函数及其参数传递给元函数
- C++ 中的泛型函数持有者
- C++ 验证使泛型函数
- 两个不同流的泛型函数
- 如何覆盖 'const T&' 和 'T&&' 的泛型函数,其中 T 可以作为引用?
- 如何创建公开泛型函数的 DLL
- 为什么 std::apply 使用泛型函数失败
- 在某个值范围内生成 BST 的泛型函数
- 无法在循环中实例化泛型函数
- MISRA C++规则 14-5-1:在与类型关联的命名空间中声明的泛型函数模板的名称
- 使用泛型函数调用打印结构的所有嵌套成员变量
- C++ 使用数组作为参数创建泛型函数
- 泛型函数是否可以用于对结构求和
- C++为所有 std::sets 编写泛型函数
- 指向类成员函数的泛型函数指针