字符串::分配在字符串向量中不起作用

string::assign doesn't work in vector of strings

本文关键字:字符串 不起作用 分配 向量      更新时间:2023-10-16

为什么这个程序崩溃?它在线路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');
}

如果真的不起作用,最好用什么代替?

vector<string> vec;
vec.reserve(5);
vec[0].assign("blabla");

这会导致未定义的行为。vec[0]已被保留但未分配。您应该使用push或template。


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次