2013-05-02 209 views
0

基本問題你能幫我理解如何使用矢量矢量。以vector< vector<int> > help爲例。我不明白它是否是一個整數矢量,每個矢量是一個整數矢量,還是它是一個整數矢量矢量?我也不明白如何使用它。矢量的矢量麻煩

示例代碼

vector< vector<int> > test[500]; 
test[0].emplace_back(1); 
cout << test[0][0]; 
test[50].emplace_back(4); 
cout << " " <<test[50][0]; 

-console- 
1 50 //this is not what happens btw, but it is the desired results 

免責聲明我花了一上午的測試中更好的一部分和谷歌搜索這一點。請幫助:)我做了我的硬件。我找不到任何矢量矢量的文檔。此外,我有所有正確的庫,我正在使用命名空間標準。我是一個noob,我明白,命名空間是不好的做法,但它現在非常適合我。

基本上我想要的是一個向量的集合大小,每個向量都是int的向量。我寧願不去一個單獨的班級的方式。 int是一個向量,是正確的東西要看?

謝謝:)

+2

你沒有載體的載體。你有一組矢量向量。 – juanchopanza 2013-05-02 17:57:40

+0

你是什麼意思? – Krtko 2013-05-02 17:58:03

+1

您有一個包含500個矢量矢量的數組。 – juanchopanza 2013-05-02 17:58:32

回答

2

這是爲int的矢量:

std::vector<int> v; 

此爲int的向量的向量:

std::vector<std::vector<int>> v2; 

這是整數的向量,向量的陣列,其是你所擁有的:

std::vector<std::vector<int>> test[500]; 

該陣列的每個元素是std::vector<std::vector<int>>。所以test[0]就是其中之一。

如果你想要爲int的500個默認構建的載體載體,你需要

std::vector<std::vector<int>> test(500); 
+0

哈哈感謝兄弟 – Krtko 2013-05-02 18:04:10

+0

現在谷歌搜索陣列和矢量之間的區別。太棒了,謝謝你。 – Krtko 2013-05-02 18:05:34

+0

供將來參考,http://stackoverflow.com/questions/6632971/what-is-the-difference-between-stdarray-and-stdvector-when-do-you-use-one-o – Krtko 2013-05-02 18:06:36

2
test

爲int的矢量的矢量500的陣列。你的例子的第二行甚至不應該在這裏編譯,因爲你調用的是std::vector< std::vector<int> >::emplace_back(),它預計一個參數與std::vector<int>兼容,並且你提供了一個int。澄清:

  • teststd::vector< std::vector<int> >[500]
  • test[0]std::vector< std::vector<int> >
  • test[0][0]std::vector<int>
  • test[0][0][0]int

(迂腐C++開發人員會注意到的是,後三者實際上是引用,但我忽略的是爲了清楚的類型。)

1

你有什麼存在的vector -OF- vector數組我相信因爲你正在用兩個索引訪問數據不是你想要的。

我相信你可能剛剛錯字-ED構造函數初始化:

vector< vector<int> > test(500); // Note() instead of [] here. 

這將創建一個矢量的矢量,與500層內的載體爲你創建前。然後你的代碼的其餘部分應該工作!

+0

Oooh man ...大聲笑 非常感謝。 – Krtko 2013-05-02 18:02:31

2

一個vector只是一個可調整大小的數組。

要聲明的int向量(int數組),只是做:

std::vector<int> vec;

要聲明一個陣列,其中各個元件是矢量,這樣做:

std::vector< std::vector<int> > vecarr;

要設置矢量的初始大小,請執行以下操作:

std::vector<int> vec(500);不是std::vector<int> vec[500],因爲這會創建一個500 std::vectors的數組。同樣,std::vector< std::vector<int> > vec[500];創建一個500矢量矢量陣列。

要跳過寫作std::,您可以在說明您使用std名稱空間之前說using namespace std