c++ - 如何简洁地将一个数组的范围分配给另一个数组的范围?

标签 c++ c arrays

背景阅读

我正在用 C/C++ 重写一些 Verilog 代码,在 Verilog 中你可以这样做:

for (i = 0; i < N; i = i + 1) begin
     if (condition(i)) begin
          data_out[index*WIDTH +: WIDTH] = data_in[i*WIDTH +: WIDTH];
          index = index + 1;
     end
end

在这一行的位置:

data_out[index*WIDTH +: WIDTH] = data_in[i*WIDTH +: WIDTH];

我们说的是将 data_in 从位置 i*WIDTHi*WIDTH + WIDTH - 1 的部分分配给data_out 的部分从位置 index*WIDTH 开始到 index*WIDTH + WIDTH - 1

同样,在 Python 中我可以做这样的事情:

>>> arr1 = ['a', 'b', 'c', 'd']
>>> arr2 = [1, 2, 3, 4, 5]
>>> 
>>> arr1[1:3] = arr2[0:2]
>>> 
>>> print arr1, arr2
['a', 1, 2, 'd'] [1, 2, 3, 4, 5]       

我知道我可以使用额外的循环在 C 中编写:

for (i = 0; i < N; i = i + 1) {
      if (condition(i)) {
           for (k = 0; k < WIDTH; k = k + 1) {
               data_out[index*WIDTH + k] = data_in[i*WIDTH + k];
           }
           index = index + 1;
      }
 }

但是当这些赋值经常发生并且在嵌套循环中时,这有点乏味。我希望有更聪明的方法。

问题

有没有简洁的写法:

arr1[INDEX_A to INDEX_B] = arr2[INDEX_C to INDEX_D];

arr1[STARTING_POSITION_A to SOME_WIDTH] = arr2[STARTING_POSITION_B to SOME_WIDTH];

如果可以简化问题,我对 bool 值 数组特别感兴趣。

我也可以为此使用 C++,但如果代码使用简单的数据类型和数组而不是 vector ,我会更喜欢,因为它正在被合成到硬件中,而且越简单就越容易。

最佳答案

您可以使用memcpy 复制多个数组元素:

memcpy(&data_out[index*WIDTH], &data_in[i*WIDTH], WIDTH*sizeof(*data_in));

第一个参数是目标内存地址,第二个是源地址,第三个是要复制的字节数。

请注意,您需要将元素数量乘以元素大小(以字节为单位)以获得总字节数。

关于c++ - 如何简洁地将一个数组的范围分配给另一个数组的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499747/

相关文章:

c - 在 C 中对数组中的值进行排序

arrays - 如何在 Fortran 中通过 BLAS 加速高阶张量收缩的 reshape ?

python - 如何矢量化 3D Numpy 数组

c++ - 显示在 C++ 中找到的对象

c# - C# 中具有未定义行为的代码

c++ - 使用 Eclipse 在 Windows 中为 Linux 编译 C++ 程序?

c - 如何获取 char** 的大小?

c++ - 为什么没有标准库容器的通用基础?

c - Wireshark 插件导致 'heap corruption'

C拼图: Make a fair coin from a biased coin