我需要做一些特定的構造函數來獲取兩個迭代器:啓動迭代器和結束迭代器。迭代器和STL容器
我有一些代碼和它的作品:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class A
{
public:
T a[10];
typename std::vector<T>::iterator itStart, itEnd;
A(typename vector<T>::iterator itStart, typename vector<T>::iterator itEnd):itStart(itStart),itEnd(itEnd){}
void see()
{
int i=0;
while(itStart != itEnd)
{
cout<<*itStart<<endl;
a[i] = *itStart;
itStart++;
i++;
}
}
};
template <typename Iterator>
double Sum(Iterator begin, Iterator end);
int main()
{
cout << "Hello world!" << endl;
vector<int> v;
v.push_back(1);
v.push_back(1);
v.push_back(2);
v.push_back(3);
class A<int> a(v.begin(),v.end());
a.see();
return 0;
}
但我想讓構造函數的參數與所有STL容器(如集,列表,地圖等),並與正常陣列(正常指針)工作。 那麼我可以用通用模板的方式嗎?類似的東西:
template<typename T>
class A
{
public:
iterator<T> itStart, itEnd;
A(iterator<T> itStart, iterator<T> itEnd):itStart(itStart),itEnd(itEnd){}
void see()
{
while(itStart != itEnd)
{
cout<<*itStart<<endl;
itStart++;
}
}
};
我知道上面的代碼是錯誤的,但我想解釋我的想法。
當然,我可以重載構造函數,但我太懶了。太多的STL容器。 是一些模板方式來解決這個問題?
我問是另一種方式來做到這一點。不解決我的懶惰。 – Aku 2013-04-23 13:53:55
你希望'A'的成員'itStart'和'itEnd'是非特定的 - 是否正確? – 2013-04-23 13:54:26
類似的東西,它們會被檢測到(Type Set,Map等)。當構建器調用 – Aku 2013-04-23 13:57:35