通过引用传递C ++向量然后执行push_back()

时间:2014-12-15 10:44:20

标签: c++ pass-by-reference stdvector

考虑这个函数来说明这个案例:

void appendAndPrint(std::vector<int> &v, int number)
{
    v.push_back(number);    // let there has been a reallocation
    std::cout << v.back();  // does the local reference v become invalid here?

    // is it safe, for example, to call here push_back() with v once again, like
    // v.push_back(number);
}

然后用一些向量调用它:

std::vector<int> vec;
appendAndPrint(vec, 5);

第一次向量重新分配后传递给函数的引用是否无效?

编辑:

这种结构经常被使用,但在C ++标准中引用了这种安全性吗?

所有提到的是容器元素的引用/指针/迭代器的生命周期。

2 个答案:

答案 0 :(得分:3)

Iterators and references to elements are invalidated,但不是容器本身。这是正常的代码。

答案 1 :(得分:1)

对向量的引用仍然有效。

如果向向量缓冲区的某些部分有任何指针或引用(包括迭代器),则重新分配会使这些指针或引用无效,这可能是push_back的结果。

但是,您不会显示任何此类指针或对缓冲区的引用。