【发布时间】:2013-07-15 16:46:01
【问题描述】:
我想用std::fill 填充vector<int>,但向量应该包含后面递增顺序的数字,而不是一个值。
我尝试通过将函数的第三个参数迭代一个来实现这一点,但这只会给我填充 1 或 2 的向量(取决于 ++ 运算符的位置)。
例子:
vector<int> ivec;
int i = 0;
std::fill(ivec.begin(), ivec.end(), i++); // elements are set to 1
std::fill(ivec.begin(), ivec.end(), ++i); // elements are set to 2
【问题讨论】:
-
使用
std::iota而不是std::fill(无论如何,假设你的编译器足够新来支持它)。 -
不幸的是,这似乎是新标准的一部分(我不能使用)。我看到 BOOST 库有这样的功能,但它不接受向量 (boost.org/doc/libs/1_50_0/libs/range/doc/html/range/reference/…) 而是一些自定义类型。没有其他选择吗?
-
user1612880,如果你不能使用C++11/Boost,就使用Liran的代码。 要求每个操作都必须在一行上,也不是 C 源代码文件可用的字符在世界范围内都短缺:-)
-
这不是因为短缺,而是因为性能。但是,如果没有残忍的 hack 就无法实现这一点,我将使用 Liran 提供的解决方案。
-
@user1612880 你试过
std::vector。 boost版本是一个函数模板,第一个参数的“类型名”指定了一个概念。很难说,因为我只能找到一个很形式化的规范,没有简单的描述,但我觉得std::vector符合概念。