2013-01-12 32 views
2

是否有C++標準類型用於保存具有恆定大小的矢量?例如,像所有元素類型相同的元組,所以我只需要提供大小作爲模板參數?中等大小的矢量類?

我想具有相同/相似的行爲使用std::vector時一樣,但類型應儘可能緊湊和高效的作爲原料陣列(因此沒有動態分配,沒有運行時大小信息等)

我更喜歡C++ 03兼容解決方案,所以重複使用std::tuple是不是我想要的。

以下班級做我想要的嗎?

template<typename T, int N> 
struct vec 
{ 
    T component[N]; 

    // (+ some logic and accessors like operator[]...) 
}; 

// concrete example: 
vec<int,3> myVector; 

是否真的從只是說T myVector[N](具體的例子int myVector[3])有什麼區別?因爲這就是我現在正在做的事情,但我遇到了一些問題,因爲原始數組只是「指針」(+大小信息),不能用作返回值,也不是真正的值傳遞沒有深度複製發生)。

回答

10

C++ 11 has std::array;這與你寫的基本相同。

對於C++ 03,使用boost::array,它基本上與std::array兼容。

+0

謝謝,所以只是在我的項目中複製這個類讓我開心? (因爲如問題所述,我想要C++ 03兼容性) – leemes

+0

@leemes,還有迭代器和所有東西。 'boost :: array'基本上是一個C++ 03版本。這不是一個標準的類,但它是一個前兆:) – chris

+0

@眼鏡:沒有理由複製它;只需選擇一個提升。由於C++ 11是基於Boost版本的,因此這是未來的保證。 – MSalters