向量指针和push_back()

4
如果我有
void f(vector<object> *vo) {

}

我将一个向量的地址传递给函数f

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

如何使用push_back()向向量中添加元素?

1个回答

13
解除指针引用:
(*vo).push_back(object());
vo->push_back(object()); // short-hand

请注意这个概念非常基础,你可能会从阅读一本好书中受益。


请注意这有明显的缺陷:

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
}

现在函数的调用者需要为您提供一个有效的引用。


我个人建议先使用引用,但同时也感谢您展示了两种方法。 - Puppy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接