下面的代码有错误吗?
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
int main()
{
std::vector<std::string> myVector;
myVector.push_back("one");
myVector.push_back("two");
myVector.push_back("three");
myVector.push_back("four");
myVector.push_back("five");
std::sort(myVector.begin(),myVector.end(),std::less_equal<std::string>());
std::string& str = myVector.back();
std::cout << str << std::endl;
std::vector<std::string>::const_iterator it = myVector.begin();
myVector.push_back("six");
myVector.push_back("seven");
std::cout << *it << std::endl;
return 0;
}
我只能看到,通过将 vector 的最后一个元素的地址分配给 str ,这意味着如果删除该元素,则 str 为空,这可能会导致意外的行为,甚至运行时问题。
最佳答案
是的,问题出在这一行:
std::cout << *it << std::endl;
这是在几次push_back
之后发生的。由于 vector 是可调整大小的,因此在保存迭代器和添加更多元素之间,容器可能必须分配更多内存。如果确实必须这样做,那么您的迭代器将指向不再是 vector 的一部分的元素。它可能看起来不太像,但你[可能]有一个悬空指针。
同样,与:
std::string& str = myVector.back();
该引用可能会在 push_back
之后失效。
关于C++ 代码可能存在的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673995/