c++ - vector 指针和 push_back()

标签 c++ pointers vector push-back

如果我有

void f(vector<object> *vo) {

}

然后我将 vector 的地址传递给 f

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

我如何使用 push_back() 添加到 vector 中?

最佳答案

取消引用指针:

(*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
}

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

关于c++ - vector 指针和 push_back(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348536/

相关文章:

c++ - 如何从 std::vector<> 正确初始化 vector

c++ - "No match for operator+"

C++ 运算符重载影响类内运算符函数

c++ - 提交时的 SIGSEGV

c++ - C out of header in C++

C IPC - 无法从队列接收消息

c - 时间不正确,但代码似乎正确 :S (unexpected outcome)

c++ - 动态内存分配

c - 请解释 sbegin = s ? s : *lasts;

c++ - 从未知长度的手动输入中提取单个单词