首页 > 解决方案 > 有没有办法在 c++11 中按索引初始化向量?

问题描述

在初始化后,很容易按索引填充向量的元素:

std::vector<int> myVector {0, 0, 0};
int indexOfInterest = 1;
myVector[indexOfInterest] = 999;
// myVector now contains {0, 999, 0}

但是,有没有办法直接用索引初始化向量?indexOfInterest 将来可能会在我的代码中发生变化,我想避免使用

std::vector<int> myVector {0, 999, 0};

有没有类似的语法

int indexOfInterest = 1;
std::vector<int> myVector[3] {indexOfInterest : 999}; // this is made-up syntax!
// desired: myVector contains {0, 999, 0} and is 3 elements large

那可以在C++11中使用来实现这个效果吗?

标签: c++c++11

解决方案


另一种方法是使用std::unordered_map. 不完全一样,但可以根据您正在做的事情为您工作:

std::unordered_map<int, int> mp{ { indexOfInterest, 999} };
mp[someOtherIndex] = 42;

当您尝试访问它们时,您尚未分配任何内容的所有索引都将具有默认值(在本例中为 0)。


推荐阅读