2011-03-18 176 views
2

如果我有矢量指針和的push_back()

void f(vector<object> *vo) { 

} 

而且我一個向量的地址傳遞到f

vector<object> vo; 
f(&vo); 

我將如何使用的push_back()添加到載體? (我是新來的指針)

回答

8

取消引用指針:

(*vo).push_back(object()); 
vo->push_back(object()); // short-hand 

注意這是語言的基本概念,你可以從閱讀good book受益。


注意這有一個明顯的缺點:

f(0); // oops, dereferenced null; undefined behavior (crash) 

爲了使您的安全功能,您需要正確處理所有有效的指針值(是的,零是有效值)。無論是添加某種形式的檢查:

if (!vo) return; 
// or: 
if (!vo) throw std::invalid_argument("cannot be null, plz"); 

,或者通過使用引用讓你的函數本身正確:

void f(vector<object>& vo) // *must* reference a valid object, null is no option 
{ 
    vo.push_back(object()); // no need to dereference, no pointers; a reference 
} 

現在的責任是對函數的調用,爲您提供一個有效的參考。

+2

+1加快4秒。 – 2011-03-18 05:49:26

+0

我個人建議首先參考,但是顯示兩者都是+1。 – Puppy 2011-03-18 07:35:49