有人知道如何定義常量大小的矢量嗎?中等大小的矢量
例如,代替限定
std::vector<int>
這將是
std::vector<10, int>
它應該是完全交platformed。也許是一個開源課程?
有人知道如何定義常量大小的矢量嗎?中等大小的矢量
例如,代替限定
std::vector<int>
這將是
std::vector<10, int>
它應該是完全交platformed。也許是一個開源課程?
性病::載體可以隨時動態地增長,但是有兩種方法可以分配一個初始大小:
這種分配初始大小和填充用零元素:
std::vector<int> v(10);
v.size(); //returns 10
這種分配如果你想指定大小的固定編譯時間(ALA std::array<T, N>
)
std::vector<int> v;
v.reserve(10);
v.size(); //returns 0
當然,由於我們」重新編寫C++ 11,我們會寫'使用MyIntArray =標準::陣列
沒有辦法定義常量大小的矢量。如果你知道編譯時的大小,你可以使用C++ 11的std::array聚合。
#include <array>
std::array<int, 10> a;
如果您還沒有相關的C++ 11的支持,你可以使用TR1版本:
#include <tr1/array>
std::tr1::array<int, 10> a;
或boost::array,因爲已經建議在其他的答案。
雖然知道'array'與'vector'不同,因爲數據包含在對象中。對於10個整數,你可能永遠不會發現其中的差別,但對於大型陣列你可能(例如)通知,他們沒有'O(1)''swap',而大的載體做。 –
另外請注意,像vector一樣,數組沒有'size'和'capacity'的概念。在數組'size' =='max_size'中。也就是說,不能創建大小爲10(即:對於10種可能的元素的空間)的陣列,但僅填充5和期望'size'返回5. –
A std::vector
是一個動態容器,沒有限制其增長的機制。要分配的初始大小:
std::vector<int> v(10);
C++ 11有一個std::array
,這將是比較合適的:
std::array<int, 10> my_array;
如果你的編譯器不支持C++ 11考慮使用boost::array
:
boost::array<int, 10> my_array;
這個---->std::vector<10, int>
無效並導致錯誤。但新的C++標準引入了一個新類; std ::數組。你可以聲明一個這樣的數組:
std::array<int, 5> arr; // declares a new array that holds 5 ints
std::array<int, 5> arr2(arr); // arr2 is equal to arr
std::array<int, 5> arr3 = {1, 2, 3, 4, 5}; // arr3 holds 1, 2, 3, 4, 5
的std::array
有一定的大小,並支持iterator/const_iterator/reverse_iterator/const_reverse_iterator
。你可以在http://cplusplus.com/reference/stl/array/找到更多關於這門課程的信息。
,:初始大小,但不填充零數組但是您希望能夠在0
和N
之間填充具有不同數量元素的矢量,那麼一個不錯的選項是eastl::fixed_vector
。
的std ::向量:
一個std::vector
的大小是動態的 - 它會動態地分配所需的存儲,並且可以不限制大小和執行一個錯誤。
但是,您可以reserve
一定規模,然後添加元素,直到該尺寸之前需要分配新的存儲。
vector.size()
是最初爲0,並且隨着添加elementss
的std ::陣列:
一個std::array
的大小是一個編譯時間常數 - 這將靜態分配所需的存儲,並且你不能改變尺寸。
array.size()
總是數組的大小,並且等於array.max_size()
EASTL :: fixed_vector:
一個eastl::fixed_vector
的大小可以是靜態或動態的。
它最初將分配特定數量的元件,然後如果允許動態增長如果需要的話,將動態分配。
對於您最初要求爲宗旨,您可以禁用(在下面的模板實例通過bEnableOverflow
)增長
fixed_vector.size()
最初是0,並且隨着你添加元素。
template<typename T,
size_t nodeCount,
bool bEnableOverflow = true,
typename OverflowAllocator =
typename eastl::type_select<bEnableOverflow,
EASTLAllocatorType,
EASTLDummyAllocatorType>::type>
class fixed_vector;
簡單的例子:
#include <iostream>
#include <vector>
#include <array>
#include "EASTL/fixed_vector.h"
int main()
{
std::vector<int> v;
v.reserve(10);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << '\n';
std::array<int, 10> a;
std::cout << "size=" << a.size() << " capacity=" << a.max_size() << '\n';
eastl::fixed_vector<int, 10, false> fv;
std::cout << "size=" << fv.size() << " capacity=" << fv.capacity() << '\n';
return 0;
}
輸出:
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10
注意的array
大小爲10,而vector
和fixed_vector
是0
,如果它是,被賦予某些用戶定義類型的一個向量初始大小,它會被初始化爲什麼? – simplename