像数组一样构造std :: string

bad*_*ash 1 c++ string

我想像数组一样构造一个std :: string对象:

std::string str("");
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
std::cout<<str;
Run Code Online (Sandbox Code Playgroud)

但它不打印字符串.我错过了什么?

Cha*_*via 9

首先,std::string不是C字符串.您不需要NULL终止它.其次,[]运算符仅对索引有效,这< std::string::length()意味着在访问0和之间的元素之前必须预先分配至少N个元素N-1.

std::string str(4); // construct a string of size 4
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
std::cout << str;
Run Code Online (Sandbox Code Playgroud)

编辑:但也看到Johnsyweb的答案.std::string超过C字符串的一大优势是您不必担心内存分配.您可以使用+=运算符或push_back成员函数,并且可以逐个字符地构建字符串,而无需担心要保留多少内存.