2012-12-08 44 views
2

我想創建一個外部矢量固定(總是包含相同矢量)的vector<vector<int>>,但可以更改內部矢量。例如:只製作矢量中的外部矢量<vector<int>>修復

int n = 2; //decided at runtime 
assert(n>0); 
vector<vector<int>> outer(n); //outer vector contains n empty vectors 

outer.push_back(vector<int>()); //modifying outer vector - this should be error 

auto outer_it = outer.begin(); 
(*outer_it).push_back(3); //modifying inner vector. should work (which it does). 

我想這樣做只是const vector<vector<int>>,但是這使得即使是內部向量const

是我創建自己的自定義FixedVectors類的唯一選擇,還是有更好的方法來做到這一點?

+0

你需要n在運行時才能被決定嗎?或者它可以是一個編譯時間常量? –

+0

你有沒有考慮過使用const數組? – ATaylor

+1

爲什麼不使用數組來創建常量數組大小?我沒有看到爲什麼你需要使它具體成爲一個矢量的原因。 –

回答

1

裹外載體導入剛剛提供的,開始,結束和operator []的一類。讓這個類只有一個構造函數正在發揮其能力。

這很可能是最好的方法。

+0

對不起,沒有看到你建議包裝自己 –

2

definition

載體是表示可以在 大小改變陣列序列的容器。就像數組一樣,向量使用連續的存儲位置來表示它們的元素,這意味着它們的元素也可以通過在其元素的常規指針上使用偏移量來訪問 ,就像在數組中一樣高效地使用 。但與陣列不同的是,它們的大小可以動態地更改爲 ,其容量將自動由 容器處理。

,如果你不希望有一個數據結構,改變尺寸,載體可能不適合的外層最好的選擇,如何有關使用矢量的陣列。這樣數組的大小是固定的,不能修改,但仍然可以在運行時聲明大小。

vector<int> *outer; 
int VectSize; 
cout >> "size of vector array?" 
cin >> VectSize; 
outer = new vector<int>[VectSize]; //array created with fixed size 
outer.push_back() //not happening 
1
const vector<unique_ptr<vector<int>>> outer = something(n); 

對於東西,你可以寫一個函數,就像這樣:

vector<unique_ptr<vector<int>>> something(int n) 
{ 
    vector<unique_ptr<vector<int>>> v(n); 
    for (auto & p : v) 
     p.reset(new vector<int>); 
    return v; 
}