【发布时间】:2020-05-16 18:08:37
【问题描述】:
我想用一系列连续整数初始化std::vector,而不用输入所有整数,比如第二行,无法编译,在这段代码 sn-p 中:
std::vector<int> a{0, 1, 2, 3, 4, 5};
std::vector<int> b{std::ranges::iota_view(0, 5)}; // ERROR!
当然,我更喜欢:
std::vector<int> b{0:5};
但这在 C++41 标准之前没有安排。任何想法如何在 C++20 中做到这一点?
【问题讨论】:
-
您是否有任何特定限制会阻止将它们设置在循环中?在编译时要求它没有多大意义,因为存储空间不存在。
-
'std::vector
b(5); 有什么问题? std::iota(b.begin(), b.end(), 0)'? -
@Cortex:因为它首先对数组进行值初始化。
-
@KennyOstrom 我喜欢简洁的符号,并且尽可能避免使用命令式代码。
-
迭代器构造函数怎么样?
auto v = std::views::iota(0, 5); auto b = std::vector(v.begin(), v.end());