[英]cpp 2d vector arguments (size, ?)?
我在Coursera上圖上算法的作業1中的reachability.cpp
中遇到了這條線,其中n
是cin
個頂點, m
是cin
邊。
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.