c – 用于展平容器容器的通用功能

c – 用于展平容器容器的通用功能,第1张

概述我试图更好地掌握迭代器和泛型函数.我认为编写一个转换容器1<的函数是一个很有用的练习. container2< type> >到container3< type>.例如,它应该能够转换向量<双端队列< INT> >列出< int>. 我认为所有容器访问都应该通过迭代器,就像< algorithm>中的函数一样. 这是我的代码: #include <iterator>#include <algor 我试图更好地掌握迭代器和泛型函数.我认为编写一个转换容器1<的函数是一个很有用的练习. container2< type> >到container3< type>.例如,它应该能够转换向量<双端队列< INT> >列出< int>.

我认为所有容器访问都应该通过迭代器,就像< algorithm>中的函数一样.

这是我的代码:

#include <iterator>#include <algorithm>// COCiter == Container of Containers Iterator// Oiter == Output Iteratortemplate <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模板错误消息,未定义引用voID flatten< ......模板页面...... 我觉得我的代码太容易编写了,我还需要更多的东西来确保内部容器中的数据类型与输出容器中的数据类型相匹配.但我不知道该怎么办.

解决方法 我发现了这个问题.感谢SFINAE(替换失败不是错误),您的编译器找不到正确的模板,因为您尝试通过键入start()(可能是拼写错误)来调用operator().试试这个:
#include <iterator>#include <algorithm>// COCiter == Container of Containers Iterator// Oiter == Output Iteratortemplate <class COCiter,Oiter dest) {    while (start != end) {        dest = std::copy(start->begin(),start->end(),dest);        ++start;    }}
总结

以上是内存溢出为你收集整理的c – 用于展平容器容器的通用功能全部内容,希望文章能够帮你解决c – 用于展平容器容器的通用功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1257042.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存