下面是个相关的例题:
定义一个模板函数concatenate()(其参数列表只能是迭代子),要求能集合两个容器对象A、B中的元素,放入第三个容器C,三个容器的类型要求是可以不同的,但容器中的元素都是一个类。
请大家能给点提示,最好是相关的代码。一个人看进展实在太慢。
8 个解决方案
#1
参考SGI STL的copy方法的实现。
#2
谢谢你的提示,我已经知道如何进行连接操作了。但现在的主要问题是,如何通过迭代子的参数列表,对函数内部的容器进行操作?
还有就是如何用TEMPLATE实现函数中三个容器互为不同类?
问题水平不高,但实在资质愚钝,还请大家积极指点小弟。可以多加分!
还有就是如何用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;
}
能帮忙看看,这个用迭代子操作泛型函数错在哪里吗?
#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行的错误最不能理解,到底是泛形的错误还是迭代子的错误??
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实现函数中三个容器互为不同类?
问题水平不高,但实在资质愚钝,还请大家积极指点小弟。可以多加分!
还有就是如何用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;
}
能帮忙看看,这个用迭代子操作泛型函数错在哪里吗?
#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行的错误最不能理解,到底是泛形的错误还是迭代子的错误??
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
还是要靠自己啊。不过大家也帮了不小的忙。但还是感觉象自问自答。呵呵,散分!