2015-06-19 72 views
1

我有這樣的功能:傳遞一個向量作爲參數的功能

void Foo(std::vector<bool> Visited, int actual element); 

我實際使用此功能在圖一BFS,但它會在一個無限循環。我懷疑它總是創建訪問矢量的副本。 如何讓它更改在main中某處被聲明和初始化的向量?我對整個「複製」理論是否正確?

如何使用指向對象的指針,因爲我認爲<vector>是一個對象?

void Foo(std::vector<bool>& Visited, int actual element); 
         ^

現在你可以修改傳遞給Foo原向量:由參考

+0

是它傳遞一個副本,你可以改變簽名'無效美孚(標準::矢量和訪問, int actual element);'能夠修改函數中的向量。 https://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value就你的無限循環而言,我們無法在沒有看到代碼的情況下幫助你。 – CoryKramer

回答

2

使用引用類型

void Foo(std::vector<bool> &Visited, int actual element); 

否則,功能涉及原始載體的拷貝。

這裏是一個dempnstrative程序

#include <iostream> 
#include <vector> 

void f(std::vector<int> &v) 
{ 
    v.assign({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); 
} 

int main() 
{ 
    std::vector<int> v; 

    f(v); 

    for (int x : v) std::cout << x << ' '; 
    std::cout << std::endl; 
}  

程序輸出是

0 1 2 3 4 5 6 7 8 9 
3

通過。

我是否對整個「複製」理論?

是的。聲明參數沒有&*傳遞對象 =作爲副本。這同樣適用於返回類型等。(隨着移動構造函數除外)