我有以下代码:
using namespace std;
int main(){ 字符串文字; string * OldArray = nullptr; string * NewArray = …
我将不得不使用某种函数从某些地址范围开始复制数据。任何想法如何这样做?
C ++标准库有一个复制算法。它被称为 std::copy 。如果您不使用标准库,则可以使用循环,赋值运算符和指针算法实现相同的算法。
std::copy
是不是创建了一个字符数组,与字符串相比,能够容纳500个字符浪费内存?
是。
如果是这样,那么在没有字符串类的C语言中问题是如何解决的?
以类似的方式如何 std::string 本身已实施;毕竟, std::string 不能用来实施 std::string 。而基础数据结构 std::string 可以在C中实现,也可以在C ++中实现,获取和释放内存的方式有些不同,因为C没有类或异常。
std::string
字符串只是一系列对象的特例 - 它是一系列字符。有几个可调整大小的数据结构可以表示序列。 std::string 和 std::vector 例如,使用称为“动态数组”的数据结构来实现。
std::vector
动态数组使用指针实现,指针指向动态分配的数组,指向该数组大小的记录,以及指向最后插入元素的指针(或者,元素数量)。如果分配的空间用完,则会分配一个新的更大的动态数组,复制旧数组中的内容,并释放旧数组。以几何速率增长阵列是很重要的,以便实现插入操作的恒定渐近复杂度(摊销)。