为什么这个程序崩溃了?它在vec[0].assign("blabla");
行崩溃:
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> vec;
vec.reserve(5);
vec[0].assign("blabla");
}
或者这个:
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> vec;
vec.reserve(5);
vec[0].push_back('a');
}
最好使用什么而不是它真的不起作用?
答案 0 :(得分:1)
vector<string> vec;
vec.reserve(5);
vec[0].assign("blabla");
这会导致未定义的行为。 vec[0]
已被保留但未分配。你应该使用push或emplace代替。
vector<string> vec;
vec.reserve(5);
vec[0].push_back('a');
同样的错误。您正在推送到目前尚不存在的vec[0]
。
<强>解决方案:强>
vector<string> vec;
vec.reserve(5);
vec.emplace_back("blabla"); //or push_back
或者:
vector<string> vec;
vec.resize(5);// Notice resize not reserve
vec[0].assign("blabla");//this works now since vec[0] is exist
或者:
vector<string> vec;
vec.resize(5);// Notice resize not reserve
vec[0].push_back('b'); //this works now since vec[0] is exist
我 NOT 更喜欢第二个选项,因为它导致构造N次然后分配N次