用一个lambda初始化一个向量,该lambda被馈送到c++中的索引



是否有库函数用于根据向量元素的索引初始化向量?

这将缩短以下内容:

#include <vector>
using namespace std;
int main() {
auto square = [] (int n) {return n*n;};
vector<int> v(5, 0);
for (int i = 0; i < 5; i++){
v[i] = square(i);
}
}

想到的方法是将其分为两个步骤。在这种情况下,std::iota将用输入(0、1、2等(填充矢量。然后std::transform将对每个元素执行函数square,并在向量中替换它们。

int main()
{
auto square = [] (int n) {return n*n;};
std::vector<int> v(5, 0);
std::iota(v.begin(), v.end(), 0);
std::transform(v.begin(), v.end(), v.begin(), square);
for (int i : v)
std::cout << i << ' ';
}

输出

0 1 4 9 16  

老实说,一旦范围可用,这将是一种更加简洁和精简的东西,C++20工作示例

int main()
{
auto square = [] (int n) {return n*n;};
for (int i : std::views::iota(0, 5) | std::views::transform(square))
std::cout << i << ' ';
}

对于向量,有一种简单的方法可以通过减去指针来计算其索引:

std::for_each(v.begin(),v.end(), 
[&v,&square](auto& elem){ elem = square(&elem - &v[0]);});

通过auto& elem访问向量的原始项,然后通过&elem - &v[0]计算索引,该索引被传递到square中。

最新更新