假设我有以下代码:
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/