矢量指针和push_back()

时间:2011-03-18 05:45:24

标签: c++ pointers vector push-back

如果我有

void f(vector<object> *vo) {

}

我将矢量的地址传递给f

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

如何使用push_back()添加到矢量?

1 个答案:

答案 0 :(得分:10)

取消引用指针:

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

请注意,这是该语言的基本概念,您可以阅读good book


请注意,这有一个明显的缺点:

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

为了使您的函数安全,您需要正确处理所有有效的指针值(是的,null是一个有效值)。要么添加某种支票:

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
}

现在函数的调用者有责任为您提供有效的参考。