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