如何不使用循环为数组指定索引范围赋值?是否有STL函数可用?
不使用循环批量设置数组元素为0的方法
针对数组a[7]={1, 2, 3, 4, 5, 6, 7},要将索引2到5的元素设为0,有两种无需手动编写循环的便捷方法:
1. 使用C++ STL的std::fill函数
std::fill是STL算法库中的专用函数,用于将指定范围内的元素统一设置为目标值,完全替代手动循环逻辑。
示例代码:
#include <algorithm> // 必须包含该头文件 int a[7] = {1, 2, 3, 4, 5, 6, 7}; // 索引2到5对应数组的第3至第6个元素,std::fill采用左闭右开范围,因此结束迭代器为a+6 std::fill(a + 2, a + 6, 0);
执行后数组会变为{1, 2, 0, 0, 0, 0, 7},完全符合需求。
2. 使用C标准库的memset函数
如果处理的是基本数据类型且目标值为0,可使用memset按字节填充内存区域。
示例代码:
#include <cstring> // 包含该头文件 int a[7] = {1, 2, 3, 4, 5, 6, 7}; // 从a+2的位置开始,填充4个int元素对应的内存空间(每个int占sizeof(int)字节) memset(a + 2, 0, 4 * sizeof(int));
注意:memset是按字节操作的,仅当目标值的每个字节都相同时适用(比如0,其所有字节均为0)。若要设置非0值(如1),使用memset会导致错误结果,因为它会将int的每个字节都设为1,最终得到的是0x01010101而非1。
内容的提问来源于stack exchange,提问作者Ahnaf Rahman
相关产品推荐
相关产品推荐

