假设我有以下代码:

std::vector<std::string>* vs = new std::vector<std::string>;
vs->push_back(string("Hello"));
vs->push_back(string("World"));

这会使指针vs无效吗?更具体地说,
void doSomething(std::vector<std::string>* vs) {
    vs->push_back(string("thisWasATriumph"));
    if (vs->size() < 3) {
        doSomething(vs);
    }
}
int main() {
    std::vector<std::string>* vs = new std::vector<std::string>;
    doSomething(vs);
    std::cout << vs->back() << endl;
}

doSomething(vs)的调用中是否包含先前插入的元素?

最佳答案



不,它不会使指向 vector 本身的指针无效(在大多数情况下,BTW1具有这种效果很愚蠢)。

您可能会因为documentation中所述而使任何std::vector<>::iterator值无效而感到困惑:






是。

最好只使用一个引用,而根本不使用new:

void doSomething(std::vector<std::string>& vs) {
                                      // ^
    vs.push_back(string("thisWasATriumph"));
    if (vs.size() < 3) {
        doSomething(vs);
    }
}
int main() {
    std::vector<std::string> vs; // = new std::vector<std::string>;
                                 // ^^^^^^^^^^ No need or this
    doSomething(vs);
    std::cout << vs->back() << endl;
}

1)动态分配std::vector几乎没有优势。只需使用具有自动内存分配功能的简单本地变量或成员变量即可。

关于c++ - 如果我有一个指向 vector 的指针,插入时是否会使它无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38314959/

10-14 16:45