关于输入输出
char[] 能用 C 风格输入输出,string 通常不行,所以使用 string 通常顺便解绑 cin,cout。
解绑后的 cin,cout 不要和 getchar 快读同时使用。
关于函数传参
char[] 传入函数中不会占用格外内存,也就是默认取地址的,在函数中更改会直接影响原串。
string 传入函数中是搞一个新的 string 来复制原串,所以每次都会单独占一个内存,但同时函数中更改不会直接影响原串,解决方法是传参的时候取地址。
关于获取长度
strlen(char[]) 的复杂度为 \(O(len)\) 的,一些时候会被坑死,所以千万不能重复调用。
string.size 的复杂度为 \(O(1)\) 的,这是十分优秀的。
关于空间
char[] 本质是数组,string 本质是 vector,所以 string 是有动态空间的,但同时好多时候 string 需要手动扩容后才能正常用,比较典的就是如果直接调用 string 没申请到的下标会直接 RE 掉。
string 和 vector 一样可以 push_back 和 pop_back。
关于拼接
string 比较方便的一点可以直接将两个 string 拼在一起,用 + 连接,但这个复杂度和 char[] 手动接是一样的都会 \(O(n+m)\),只是写着方便。
关于下标
两者下标都是从 \(0\) 开始,char 可以通过 \(+1\) 变成下标从 \(1\) 开始,同时长度不变;string 可以写成 " "+string
,但是长度会 \(+1\)。