Alrott SlimRG Asked:2021-11-25 03:43:55 +0000 UTC2021-11-25 03:43:55 +0000 UTC 2021-11-25 03:43:55 +0000 UTC 从 uint8 到 uint16 的向量类型转换 772 有一个向量std::vector<uint8_t> From; 它包含 10^9 个元素 并且有一个空向量std::vector<uint16_t> To; ,您需要在其中传输值,以使元素的值保持不变。 如何正确执行? c++ 1 个回答 Voted Best Answer Stanislav Volodarskiy 2021-11-25T05:20:39Z2021-11-25T05:20:39Z To.assign(From.begin(), From.end()); 是的,它只是一个副本。一个好的编译器会计算向量的大小From、分配内存并复制数据。 需要多少内存?让我们将向量的体积表示To为 1。那么向量的体积From将是原来的两倍——两个单位。由于我们正在复制,因此在复制期间我们将需要三个内存单元。 是否可以在更少的内存中To转换From?不,因为我们希望它From是一个向量。 向量只能以一种方式分配内存——从堆中请求一个连续的内存块。此块不能包含请求时的数据 -realloc向量不使用类型技术(为什么是一个单独的有趣问题)。由于该块中没有数据,说明它们在别的地方,占用了一个内存单元。也就是说,在为向量分配内存的那一刻,我们需要三个内存单元:一个用于数据,两个用于新向量。 和一般配方 - 如果内存不足,请不要使用向量。与内存大小相当的连续内存块是邪恶的。
是的,它只是一个副本。一个好的编译器会计算向量的大小
From、分配内存并复制数据。需要多少内存?让我们将向量的体积表示
To为 1。那么向量的体积From将是原来的两倍——两个单位。由于我们正在复制,因此在复制期间我们将需要三个内存单元。是否可以在更少的内存中
To转换From?不,因为我们希望它From是一个向量。向量只能以一种方式分配内存——从堆中请求一个连续的内存块。此块不能包含请求时的数据 -
realloc向量不使用类型技术(为什么是一个单独的有趣问题)。由于该块中没有数据,说明它们在别的地方,占用了一个内存单元。也就是说,在为向量分配内存的那一刻,我们需要三个内存单元:一个用于数据,两个用于新向量。和一般配方 - 如果内存不足,请不要使用向量。与内存大小相当的连续内存块是邪恶的。