【问题标题】:Vector pointer and push_back()向量指针和 push_back()
【发布时间】:2011-03-18 05:45:23
【问题描述】:

如果我有

void f(vector<object> *vo) {

}

然后我将向量的地址传递给 f

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

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

【问题讨论】:

    标签: c++ pointers vector push-back


    【解决方案1】:

    取消引用指针:

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

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

    【讨论】:

    • 我个人建议先参考,但同时显示 +1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多