如何为一维、二维vector或数组整体赋指定值,无需循环单行实现?
C++ 二维数组/二维vector单行赋值方案
固定长度原生二维数组(char a[n][m] 类型)
- 通用赋值方案(兼容任意char类型值):
使用std::fill遍历整个数组的连续内存空间完成赋值,示例为给所有元素赋值为'x':
说明:std::fill(&a[0][0], &a[0][0] + sizeof(a) / sizeof(a[0][0]), 'x');&a[0][0]取数组首元素地址,加上总元素数得到尾后地址,固定长度二维数组所有元素在内存中连续排布,可直接批量填充 - 赋值为0的简化方案:
可以直接用memset实现,效率更高:
注意:memset(a, 0, sizeof(a));memset按字节赋值,仅适合赋值0、-1或单字节char类型值,不要用于给int等多字节类型数组赋非单字节匹配的数值
若你使用的是通过
new申请的二级指针形式动态二维数组,可逐行调用std::fill实现单行逻辑:for (int i = 0; i < n; i++) std::fill(a[i], a[i] + m, 目标值);
二维vector(std::vector<std::vector<T>> 类型)
两种常用单行实现方案:
- 保留原有内存空间的赋值方案,示例为给所有元素赋值为1:
for (auto& row : vec2d) std::fill(row.begin(), row.end(), 1); - 不需要保留原有空间时,可直接构造新二维vector赋值,写法更简洁:
vec2d = std::vector<std::vector<int>>(n, std::vector<int>(m, 目标值));
内容的提问来源于stack exchange,提问作者Harshit
相关产品推荐
相关产品推荐

