Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化一个向量,其中lambda以c++;_C++_Stl - Fatal编程技术网

C++ 初始化一个向量,其中lambda以c++;

C++ 初始化一个向量,其中lambda以c++;,c++,stl,C++,Stl,是否有一个库函数用于根据向量元素的索引初始化向量 这将缩短以下时间: #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; int ma

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

这将缩短以下时间:

#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;
int main(){
自动平方=[](int n){返回n*n;};
向量v(5,0);
对于(int i=0;i<5;i++){
v[i]=平方(i);
}
}

想到的方法是将其分为两个步骤。在这种情况下,将使用输入(0、1、2等)填充向量。然后将对每个元素执行函数
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 << ' ';
}
老实说,这是一种一旦可用就会更加简洁和精简的东西

intmain()
{
自动平方=[](int n){返回n*n;};
对于(inti:std::views::iota(0,5)| std::views::transform(square))

std::cout对于向量,有一种通过子指针计算其索引的简单方法:

std::for_each(v.begin(),v.end(), 
    [&v,&square](auto& elem){ elem = square(&elem - &v[0]);});
通过
auto&elem
访问向量的原始项,然后通过
&elem-&v[0]
计算索引,并将其传递到
正方形中

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]);});