将多个数组槽设置为一个值的更简单方法

新手上路,请多包涵

我在 C++ 编码,我有以下代码:

 int array[30];
array[9] = 1;
array[5] = 1;
array[14] = 1;

array[8] = 2;
array[15] = 2;
array[23] = 2;
array[12] = 2;
//...

有没有办法初始化类似于以下的数组?

 int array[30];
array[9,5,14] = 1;
array[8,15,23,12] = 2;
//...

注意:在实际代码中,最多可以有 30 个 slot 需要设置为一个值。

原文由 Matthew D. Scholefield 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 712
2 个回答

此功能将有助于减轻疼痛。

 void initialize(int * arr, std::initializer_list<std::size_t> list, int value) {
    for (auto i : list) {
        arr[i] = value;
    }
}

像这样称呼它。

 initialize(array,{9,5,14},2);

原文由 aaronman 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您的索引不相关,您可以做的最好的事情是“链接”分配:

 array[9] = array[5] = array[14] = 1;

但是,如果您有某种方法可以确定性地计算索引,则可以使用循环:

 for (size_t i = 0; i < 3; ++i)
    array[transform_into_index(i)] = 1;

如果您有一些存储索引的容器,则最后一个示例显然也适用。所以你可以做这样的事情:

 const std::vector<size_t> indexes = { 9, 5, 14 };
for (auto i: indexes)
    array[i] = 1;

原文由 syam 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题