我試圖爲數值計算的任何維數組創建我自己的容器。我想用模板做這件事,這樣我就可以重載下標操作符[],以便它像正常的數組和向量一樣工作,例如訪問條目,如[10] [10] [10]等。模板類的構造函數問題 - 爲multidim數組設計一個容器
我在嘗試創建容器來容納多維數組時遇到了構造函數無法工作的問題。請幫忙!
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;
template <class T>
class container{
public:
inline T& operator[](int i){return data[i];}
container(int si, T initval){
size=si;
data=new T[size];
transform(data,data+size,data, [initval] (T d) {return initval;});
// transform fills array with the initial value.
}
~container(){delete [] data;}
private:
T* data;
int size;
};
int main(){
//For example:
vector<vector<int>> v1(10,vector<int>(10,0)); //2D 10x10
vector<vector<vector<int>>> v2(10,vector<vector<int>>(10,vector<int>(10,0)));
//3D 10x10x10
container<int> c1(10,0); //1D 10x1 works!
container<container<int>> c2(10,container<int>(10,0)); //2D 10x10 fails!
system("pause");
return 0;
}
VS10錯誤輸出:
error C2512: 'container<T>' : no appropriate default constructor available
with
[
T=int
]
c:\users\jack\documents\visual studio 2010\projects\ref\ref\ref.cpp(11) : while compiling class template member function 'container<T>::container(int,T)'
with
[
T=container<int>
]
c:\users\jack\documents\visual studio 2010\projects\ref\ref\ref.cpp(28) : see reference to class template instantiation 'container<T>' being compiled
with
[
T=container<int>
]
Build FAILED.
我知道我可以只使用的valarray或升壓庫,但我想了解如何創建自己的。效率很重要。謝謝!
謝謝!我添加了一個默認的構造函數,這些行和它的工作。 void * raw = :: operator new(size * sizeof(T)); data = new(raw)T [size]; – Jack 2011-01-13 14:46:52
@傑克:我的意思是一個或另一個。 `void * raw = :: operator new(size * sizeof(T))沒有優勢; data = new(raw)T [size];`over`data = new T [size];`,如果你還在做`delete [] data`,如果你使用前者,這是不正確的。 – 2011-01-13 14:51:18