gpt4 book ai didi

c++ - 在cpp中使用for_each循环遍历数组

转载 作者:行者123 更新时间:2023-11-30 00:42:53 24 4
gpt4 key购买 nike

首先,这是代码:

#include <iostream>
#include <algorithm>

using namespace std;




class Array
{

int* arr;
int n;

public:

Array();
Array(const Array&);
Array(Array &&);
Array& operator=(const Array&);
Array& operator=(Array &&);
void print();
~Array();
};

Array::Array()
{
cout<<"No of elements: "<<endl;
cin>>n;
if(n!=0)
{
arr = new int [n];
cout<<"\nInsert values:"<<endl;
for_each(arr, arr+n, [](int x){cin>>x;});
}
}

Array::Array (const Array& a)
{
int i=0;
this->n=a.n;
arr= new int [n];
for(i=0;i<n;i++)
arr[i]=a.arr[i];
}

Array::Array (Array &&a)
{
this->n=a.n;
arr=a.arr;
a.arr=nullptr;
}

Array& Array::operator=(const Array& a)
{
int i=0;
this->n=a.n;
arr= new int [n];
for(i=0;i<n;i++)
arr[i]=a.arr[i];
return *this;
}

Array& Array::operator=(Array &&a)
{
this->n=a.n;
arr=a.arr;
a.arr=nullptr;
return *this;
}

void Array::print()
{
for_each(arr, arr+n, [](int a){cout<<a;});
}

Array::~Array()
{
n=0;
delete [] arr;
}

int main()
{
Array a;
Array b;
Array c=a;
Array d;
d=b;
c.print();
cout<<endl;
d.print();

return 0;
}

因此,如您所见,我创建了默认构造函数(如果没有参数的构造函数可以称为默认构造函数),它使用 for_each 循环创建一个数组,并将 lambda 函数用作第三个参数,如您所见,它所做的就是它接受我插入的值并将其作为变量 x 的值,它应该采用从 arr[0] 到 arr[n-1] 的值。

但是,当我打印 put 在 main 中创建的任何数组时,它只打印出零,这不是由于复制构造函数,因为我尝试打印数组 a 和 b 并且发生了同样的事情(注意在这种情况下我是打印出 c 和 d,因为它们分别是 a 和 b 的拷贝)。

我还尝试查看它是否正常工作,因为我试图在 for_each 循环结束后立即打印出数组的一些元素,结果证明 for_each 循环对数组没有影响,因为即使在循环结束后它仍保持为零。

感谢任何帮助!

最佳答案

当你使用 for_each 循环时,你传递的是一个 lambda,

for_each(arr, arr+n, [](int x){cin>>x;});

但是 lambda (int x) 的参数意味着您正在创建一个数组元素的拷贝,您将为其分配一个值。当您离开 lambda 的主体时,该拷贝将被销毁,而数组中的原始值保持不变。

改成

for_each(arr, arr+n, [](int& x){cin>>x;});

这样你就不会在数组中创建值的拷贝,但你会传递一个对它的引用,这意味着你会将值写入数组。

关于c++ - 在cpp中使用for_each循环遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57568878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com