簡體   English   中英

cpp 2d矢量參數(大小,?)?

[英]cpp 2d vector arguments (size, ?)?

我在Coursera上圖上算法的作業1中的reachability.cpp中遇到了這條線,其中ncin個頂點, mcin邊。

vector<vector<int> > adj(n, vector<int>());

第二個論點是什么? 我認為這使n行的2D向量,每個行都有一個vector(int)但這里沒有其他答案提到第二個參數,我在cpp參考和其他來源上找不到任何內容。

我試圖顯式聲明列的大小並使用0進行初始化,如下所示:

vector<vector<int> > adj(n, vector<int>(n, 0));

因為我想用下面的函數打印出形狀以確認我有一個鄰接矩陣。

void print(vector<vector<int> >  &a)
{
  std::cout<<"Vec elements:\n";

  for(unsigned int j =0; j<a.size(); j++)
  {
    for(unsigned int k =0; k<a[j].size(); k++)
    {
      std::cout<<a[k][j]<<" ";
    }
  }
}

我還有其他代碼可以像這樣制作2D向量:

vector<vector<int> > graph;

然后,我將每行的大小調整為具有循環的n列,以制作鄰接矩陣。

for(i=0;i<n;i++)
  graph[i].resize(n); //resize 2d array

因為這是講師提供的樣板代碼,所以他們的工作必須有一些優點。 所以我想知道它是什么。

編輯:

在加迪斯的書中看到了這一點:

加迪斯矢量圖

所以我想它正在制作一個n元素的向量,每個元素都是一個vector<int>

第二個論點是什么? 我認為這使n個行的2D向量,每個行都有一個vector(int)

是的,這是正確的。

第二個參數是[外部]向量的每個元素的“初始值”。 在這里,您說的是每個元素,而這些元素又是vector<int> ,將僅是默認構造的。 (好吧,副本是從此默認構造的臨時文件構造的!)


請注意,與其他答案中的主張相反,您使用的構造函數不是 vector( const vector& other, const Allocator& alloc ) ,而是vector( size_type count, const T& value, const Allocator& alloc = Allocator()) ( (第三個參數保留為默認值)。 這個問題與分配器無關。

但是,確實可以使用explicit vector( size_type count, const Allocator& alloc = Allocator() )並依靠內部矢量的默認構造:

vector<vector<int> > adj(n);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM