2014-03-14 50 views
0

這裏是我的代碼:更改爲矢量

vector<int> Edge[1000000]; //size of array must be very high 

scanf("%d%d",&N,&M); 
//N = size of workable index numbers for Edge 
for(i=1;i<=M;i++){ 

    scanf("%d%d",&u,&v); 
    Edge[u].push_back(v); 
} 

但你可以看到,它的載體的靜態數組。 如果我把它改成這樣:

vector<vector<int>> Edge; 

我如何能做到這一點的週期和推回?我需要創建一個N + 1大小的矢量,每個位置也是一個矢量。

+1

'vector > Edge(100000);'或'vector > Edge; Edge.resize(100000);' – stardust

+0

我需要在消除後初始化,因爲它是一個全局變量 – Elsendion

+0

即使變量是全局變量,它仍然有效。 – stardust

回答

0

我需要創建一個N + 1大小的向量,每個位置也是一個向量。

考慮,你知道在編譯時外部容器的大小,也可以使用std::array存儲載體:

std::array<std::vector<int>, N + 1> Edge; 

如果你不知道在編譯時的大小,可以使用:

std::vector<std::vector<int>> Edge; 

但作爲一般的經驗法則,往往避免載體的載體,因爲它們通常不會很好地工作。

+0

我同意,直到這樣:「傾向於避免向量載體,因爲它們通常不會很好地工作」。 –

+0

@PaulDraper,說出原因可能是個好主意。 – Shoe

0

您可以通過將int傳遞給構造函數來構造給定大小的向量。然後,您可以使用循環來初始化子向量。

int size; 
vector<vector<int>> Edge(size); //Initializes Outer Array to have 'size' elements 

for(auto i:Edge) 
{ 
    // i is a vector within Edge 
} 

好處是,你不必推回。如果你仍然想要push_back(不必跟蹤迭代器/ int),你可以使用vector.reserve()來代替。