我会用线性增加的值填充/初始化一个向量。例如,对于这个向量中的每个元素,我希望下一个元素a比前一个元素多。或者该kth元素的值为k*a
像这样的东西:
float a = 1.132;
vector<float> v(100);
for (int n = 0; n < 100; ++n)
{
v[n] = n*a;
}
Run Code Online (Sandbox Code Playgroud)
有更优雅的方法吗?谢谢。
一个 Matlab 的例子是linspace(beginning value, end value, number of points)
linspace(1,5, 6)
ans =
1.0000 1.8000 2.6000 3.4000 4.2000 5.0000
Run Code Online (Sandbox Code Playgroud)
您可以做的第一件事就是改用std::generateorstd::generate_n代替 for 循环。该generate版本可能看起来像
int main()
{
float a = 1.132;
std::vector<float> v(100);
std::generate(v.begin(), v.end(), [n = 0, &a]() mutable { return n++ * a; });
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是创建一个迭代器,它将在迭代时生成值。这样做的优点是您不需要v使用任何默认构造值进行初始化(这可能很昂贵)。然后使用向量范围构造函数,它将初始化所有元素。只要迭代器遵守前向迭代器要求,向量就会计算出所需的空间(如果不是随机访问会导致完整迭代),分配,然后初始化(完整迭代)。对于双迭代来说,这可能会很昂贵,因此它可能不会比生成情况更快,而且可能会更慢(因为零初始化非常快)。
| 归档时间: |
|
| 查看次数: |
4821 次 |
| 最近记录: |