2016-11-09 134 views
-2

我不確定如何投射pop_back()函數vector獲得的值。以下是說明問題的簡單代碼。如何在C++中存儲從矢量`pop_back()`獲得的值?

#include<vector> 
#include<iostream> 

using namespace std; 

int main() 
{ 
    vector<int> a,b; 
    int val; 

    a.push_back(1); 
    a.push_back(2); 
    a.push_back(3); 
    a.push_back(4); 

    for(int i=0; i<4; i++) 
    { 
    val = a.pop_back(); 
    b.push_back(val); 
    } 

    vector<int>::iterator v = b.begin(); 
    while(v != b.end()) 
    { 
    cout << *v << " "; 
    v++; 
    } 
    return 0; 
} 

這是我得到的錯誤。

pushback.cpp:18:9: error: assigning to 'int' from incompatible type 'void' 
    val = a.pop_back(); 
     ^~~~~~~~~~~~~ 
1 error generated. 

我嘗試了鑄造以及; (int)a.pop_back(),但它引發一個錯誤,指出C-style cast from 'void' to 'int' is not allowed

我可以知道是否有存儲從pop_back()函數值的標準方式?

回答

5

它可能聽起來像彈出一樣返回一個值。但實際上並沒有。該標準說vector::pop_back應該刪除最後一個值,沒有返回值。

你可以這樣做:

auto val = a.back(); 
a.pop_back(); 
4

正如documentationstd::vector::pop_back()表示不返回任何值,你只需要正確的前致電std::vector::back()

val = a.back(); 
a.pop_back(); 
+0

哦!謝謝你的澄清。我剛剛在不同的語言(Python,Java等)之間混淆瞭如何實現'pop'。它從來沒有想過在C++中這是一個用詞不當的地方。 –

+2

@ÉbeIsaac有一個原因,例如,如果複製或移動ctor拋出異常該怎麼辦? – Slava