2017-09-26 75 views
-3

爲什麼向量'r'給出如下輸出?相反,它不應該在列表中爲零。C++,vector:獲取包含0的錯誤輸出

有人可以幫忙嗎?

輸出:0 0 0 0 0 5 1 2 3 4

vector <int> leftRotation(vector <int> a, int d) { 
vector<int> r(a.size()); 

// int j=0; 
for(int i=d; i<a.size(); i++) 
    r.push_back(a[i]); 

for(int i=0; i<d; i++) 
    r.push_back(a[i]); 

return r; 
} 
+0

手頭的核心問題是您正在基於猜測編寫C++。這是行不通的。從一本好書中系統地學習C++,並在需要的地方查找cppreference.com中的內容。 –

+0

已經存在一個std :: rotate。 – 2017-09-26 10:00:35

回答

2

你在你的代碼的開始初始化R 2與a.size()0副本:

vector<int> r(a.size()); 

此時,矢量r包含的值0 0 0 0 0(與a中的元素一樣多的零)。

然後,您將值推到零向量的背面。在你的循環的每一步:

0 0 0 0 0 5 
0 0 0 0 0 5 1 
0 0 0 0 0 5 1 2 
0 0 0 0 0 5 1 2 3 
0 0 0 0 0 5 1 2 3 4 

相反,初始化空載體:

vector<int> r; 
1

vector<int> r(a.size())局部變量使用接受(size_type count)參數和初始化向量的構造函數重載(或者更確切地說歸零出)包含a.size()號碼0 s。澄清檢查std::vector構造函數重載號。 3:

過載(3)置零非類類型的元素如int

使用一個默認的構造來創建,而不是一個空的容器:

std::vector<int> r; 

或:

std::vector<int> r{}; 
0
vector<int> r(a.size()); 

使用此行,可以創建一個初始大小爲a.size()的向量;在載體中的初始元素被設置爲0。

可能是你a矢量具有大小爲5,所以這是在輸出的五個零來自:

0 0 0 0 0 

然後,調用方法push_back()r上,並在r向量的末尾添加其他元素。

爲了得到更好的幫助,請澄清你的目標。