use*_*468 4 c++ arrays string pointers stl
我已经看到了以下列方式使用字符串数组的代码.
string *pointer = new string[runtimeAmmount];
Run Code Online (Sandbox Code Playgroud)
我还看到了字符串中的各个字符访问如下.
string aString = "this";
char bString[] = "that";
bString[3] = aString[3];
Run Code Online (Sandbox Code Playgroud)
以上将导致bString等于"thas".这表明字符串实际上是指向第一个字符位置的指针.但是,字符串仍然具有作为"string.c_str()"访问的成员函数,这意味着它本身作为对象不遵循指针的规则.这一切都有用吗?
注意:我原来的问题是不同的,但我想出来输入它.如果有人仍然可以回答我原来的问题只是为了验证我会很感激.我的原始问题如下:如果每个字符串在其整个生命周期中的长度变化,那么如何将字符串数组换成新的?弦不会相互碰撞吗?
我想出的答案是:字符串以某种方式包含指向C风格数组的指针,因此对象占用了一定量的空间.
要么
字符串是STL模板的一种,我还没有花时间去看.
我将在你的问题中解决4行代码中的每一行中发生的事情,但首先我应该说你的结论并不准确.您被string课程内置的操作员重载"愚弄"了.虽然很可能是在内部,但是string类维护了一个C风格的字符数组,这个数组是封装的,string并且应该被视为一个不透明的对象,不同于C风格的字符串.
现在为您的每一行:
string *pointer = new string[runtimeAmmount];
Run Code Online (Sandbox Code Playgroud)
在此行中,pointer设置为指向新分配的(空)string 对象数组. runtimeAmmount是数组中字符串的数量,而不是C样式字符串中的字符数.
string aString = "this";
Run Code Online (Sandbox Code Playgroud)
该行使用类中的(非显式)转换构造函数构造一个新的空字符串string: string(const char *).(注意,在非构造上下文中,例如aString = "this";,将使用类的operator=(const char *)重载string.)
char bString[] = "that";
Run Code Online (Sandbox Code Playgroud)
这是一个典型的C字符串,被视为一个字符数组.
bString[3] = aString[3];
Run Code Online (Sandbox Code Playgroud)
这使用了过载operator[]的的string类返回一个字符(基准),然后将其分配给C风格字符阵列中的第三个字符的位置.
我希望这有帮助.