gpt4 book ai didi

c++ - 从 C++ 中的指针 vector 中删除一个元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:56 24 4
gpt4 key购买 nike

我记得听说以下代码不符合 C++,希望比我更了解 C++ 法律术语的人能够确认或否认它。

std::vector<int*> intList;
intList.push_back(new int(2));
intList.push_back(new int(10));
intList.push_back(new int(17));

for(std::vector<int*>::iterator i = intList.begin(); i != intList.end(); ++i) {
delete *i;
}
intList.clear()

理由是 vector 包含指向无效内存的指针是非法的。现在显然我的示例可以编译,甚至可以在我知道的所有编译器上运行,但它是符合标准的 C++ 还是我应该执行以下操作,有人告诉我这实际上是符合标准的方法:

while(!intList.empty()) {
int* element = intList.back();
intList.pop_back();
delete element;
}

最佳答案

您的代码是有效的,但更好的解决方案是使用智能指针。

问题是对std::vector 的所有要求位于 C++ 标准的 23.2.4 部分。没有关于无效指针的限制。 std::vectorint* 一起工作与任何其他类型一样(我们不考虑 vector<bool> 的情况),它不关心它们指向何处。

关于c++ - 从 C++ 中的指针 vector 中删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com