新手入门第二题

时间:2021-07-09 23:19:23
学C++到STL和泛形,对迭代子(ITORATOR)这个概念还不是很清楚。
下面是个相关的例题:
定义一个模板函数concatenate()(其参数列表只能是迭代子),要求能集合两个容器对象A、B中的元素,放入第三个容器C,三个容器的类型要求是可以不同的,但容器中的元素都是一个类。
请大家能给点提示,最好是相关的代码。一个人看进展实在太慢。

8 个解决方案

#1


参考SGI STL的copy方法的实现。

#2


谢谢你的提示,我已经知道如何进行连接操作了。但现在的主要问题是,如何通过迭代子的参数列表,对函数内部的容器进行操作?
还有就是如何用TEMPLATE实现函数中三个容器互为不同类?
问题水平不高,但实在资质愚钝,还请大家积极指点小弟。可以多加分!

#3


//concatenate1.cpp
#include<iostream>
#include<numeric>
#include<algorithm>
#include<vector>
#include<iterator>
#include<list>
#include<deque>
using namespace std;

template<class T,class U,class V>
V concatenate1(T::iterator tbegin , T::iterator tend,
               U::iterator ubegin , U::iterator uend)
{
     V x(tbegin,tend);
     return x;
}

int main()
{
     deque<int> a;
     list<int> b;

     for(int i=1;i<=10;i++)
     {
     a.push_back(i);
     b.push_front(i);
     }


     vector<int> concatenate1(deque<int>::iterator i=a.begin(),
                              deque<int>::iterator j=a.end(),
                              list<int>::iterator m=b.begin(),
                              list<int>::iterator n=b.end());
     return 0;
}

能帮忙看看,这个用迭代子操作泛型函数错在哪里吗?

#4


是不是我的水平太差,我瞄了半天都瞄不出问题来!:(
看来得重新学习。

#5


不要取笑啊,我是初学,但是诚心请教啊,请多多赐教。

#6


错误信息是什么啊?

#7


以下是错误信息:

concatenate2.cpp:12: parse error before `,' token
concatenate2.cpp: In function `int main()':
concatenate2.cpp:34: default argument `std::deque<_Tp, _Alloc>::begin() [with
   _Tp = int, _Alloc = std::allocator<int>]()' uses local variable `a'
concatenate2.cpp:34: default argument `std::deque<_Tp, _Alloc>::end() [with _Tp
   = int, _Alloc = std::allocator<int>]()' uses local variable `a'
concatenate2.cpp:34: default argument `std::list<_Tp, _Alloc>::begin() [with
   _Tp = int, _Alloc = std::allocator<int>]()' uses local variable `b'
concatenate2.cpp:34: default argument `std::list<_Tp, _Alloc>::end() [with _Tp
   = int, _Alloc = std::allocator<int>]()' uses local variable `b'


12行的错误最不能理解,到底是泛形的错误还是迭代子的错误??

#8


还是要靠自己啊。不过大家也帮了不小的忙。但还是感觉象自问自答。呵呵,散分!

#1


参考SGI STL的copy方法的实现。

#2


谢谢你的提示,我已经知道如何进行连接操作了。但现在的主要问题是,如何通过迭代子的参数列表,对函数内部的容器进行操作?
还有就是如何用TEMPLATE实现函数中三个容器互为不同类?
问题水平不高,但实在资质愚钝,还请大家积极指点小弟。可以多加分!

#3


//concatenate1.cpp
#include<iostream>
#include<numeric>
#include<algorithm>
#include<vector>
#include<iterator>
#include<list>
#include<deque>
using namespace std;

template<class T,class U,class V>
V concatenate1(T::iterator tbegin , T::iterator tend,
               U::iterator ubegin , U::iterator uend)
{
     V x(tbegin,tend);
     return x;
}

int main()
{
     deque<int> a;
     list<int> b;

     for(int i=1;i<=10;i++)
     {
     a.push_back(i);
     b.push_front(i);
     }


     vector<int> concatenate1(deque<int>::iterator i=a.begin(),
                              deque<int>::iterator j=a.end(),
                              list<int>::iterator m=b.begin(),
                              list<int>::iterator n=b.end());
     return 0;
}

能帮忙看看,这个用迭代子操作泛型函数错在哪里吗?

#4


是不是我的水平太差,我瞄了半天都瞄不出问题来!:(
看来得重新学习。

#5


不要取笑啊,我是初学,但是诚心请教啊,请多多赐教。

#6


错误信息是什么啊?

#7


以下是错误信息:

concatenate2.cpp:12: parse error before `,' token
concatenate2.cpp: In function `int main()':
concatenate2.cpp:34: default argument `std::deque<_Tp, _Alloc>::begin() [with
   _Tp = int, _Alloc = std::allocator<int>]()' uses local variable `a'
concatenate2.cpp:34: default argument `std::deque<_Tp, _Alloc>::end() [with _Tp
   = int, _Alloc = std::allocator<int>]()' uses local variable `a'
concatenate2.cpp:34: default argument `std::list<_Tp, _Alloc>::begin() [with
   _Tp = int, _Alloc = std::allocator<int>]()' uses local variable `b'
concatenate2.cpp:34: default argument `std::list<_Tp, _Alloc>::end() [with _Tp
   = int, _Alloc = std::allocator<int>]()' uses local variable `b'


12行的错误最不能理解,到底是泛形的错误还是迭代子的错误??

#8


还是要靠自己啊。不过大家也帮了不小的忙。但还是感觉象自问自答。呵呵,散分!