如何声明一个包含整数数组的对象

正义论者

(C ++)嗨,我在声明对象时遇到问题,让我们先看一下它:

class arr1D
{
protected:
    int size;
    int *arr;
public:
    arr1D( int a[] ):size(sizeof(a)/sizeof(a[0])), arr(new int[size])
    {
        for(int i = 0; i < size; i++)
        {
            arr[i] = a[i];
        }
    }
    arr1D( int siz = 10 ):size(siz), arr(new int[size])
    {
        for( int i = 0; i < size; i++)
        {
            arr[i] = 0;
        }
    }
    friend ostream & operator<<( ostream &,const arr1D &);
};
int main()
{
    //arr1D *a1 = new arr1D;
    //cout << *a1;
    //prints "arr: 0 0 0 0 0 0 0 0 0 0 size: 10"
    return 0;
}
ostream & operator<<( ostream &_return, const arr1D &a)
{
    _return << "arr: ";
    for(int i=0;i<a.size;i++)
    {
        cout << *(a.arr+i) << " ";
    }
    _return << "size: " << a.size;
    return _return;
}

我想声明一个包含整数数组的对象,如下所示:

arr1D a1[] = {1,2,3,4,5}; // pseudo-code

这应该打印如下:

arr: 1 2 3 4 5 size: 5

感谢帮助!

杰乔

我想声明一个包含整数数组的对象,如下所示:(伪代码)“ arr1D a1 [] = {1,2,3,4,5};” 这应该打印如下内容:“ arr:1 2 3 4 5 size:5”感谢您的帮助!

您可以通过在类中使用初始化器列表构造函数来使用它

如下所示:

#include <iostream>
#include <initializer_list>

class arr1D
{
protected:
    int size;
    int *arr;
public:
    arr1D(std::initializer_list<int> input) : size(input.size())
    {
        int* temp = new int[size];
        int index = 0;
        for (const auto& it : input)
        {
            temp[index] = it;
            ++index;
        }
        arr = temp;
    }
        // reaming code...

此处查看直播

注意,在arr1D类中还需要一个distrctor,否则类中有指针成员时会发生内存泄漏。


或者,使用智能指针,这是处理动态内存(在堆中分配的内存)的智能方式。

此处查看示例解决方案

#include <iostream>
#include <initializer_list>
#include <memory>

class arr1D
{
protected:
    int size;
    std::unique_ptr<int[]> arr;
public:
    arr1D(std::initializer_list<int> input) : size(input.size())
    {
        arr = std::unique_ptr<int[]>(new int[size]);
        int index = 0;
        for (const auto& it : input)
        {
            arr[index] = it;
            ++index;
        }
    }
    .......
    .......
std::ostream & operator<<(std::ostream &_return, const arr1D &a)
{
    _return << "arr: ";
    for (int i = 0; i< a.size; i++)  std::cout << a.arr[i] << " ";

    _return << "size: " << a.size;
    return _return;
}

PS:但是,这更适合处理std::vector<>如果您不知道它是如何工作的,请参阅此问题

编辑:正如@MM所提到的std::initializer_list通过值传递而不是通过引用是合适的,编辑了该类的构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何声明一个函数数组?

如何声明一个对象数组

通过另一个整数数组过滤对象数组

如何声明一个包含泛型的数组?

为什么在我的主函数中声明一个整数后,我的整数数组中出现错误?

python-如何将整数数组映射到另一个整数

制作一个代表整数数组索引的数组

如何创建一个给定输入行的整数数组,其中第一个整数是长度?

如何仅使用键盘将值从一个整数数组复制到另一个整数数组?

如何将一串数字解析为一个整数数组?

查找一个整数数组的平均值

pthread启动例程返回一个整数数组

通过一个提示填充整数数组

创建一个整数数组并以空白结尾

给定一个整数数组,如何找到最大数的所有公倍数?

如何使用numpy.random生成一个整数数组

如何检查数组是否包含至少一个对象?

如何从另一个对象分配给指针函数数组?

如何声明一个包含多个整数值的变量SQL Server

创建一个整数范围或整数数组,最大整数

如何合并2个对象,每个对象包含一个对象数组?

初始化一个整数数组,该数组的值要少于声明的值,它是否只会将0加为值?

如何构建一个 numpy 对象数组(对象包含另一个数组)

我将如何编写一个函数,该函数接受一个正整数数组并返回数字上的阶乘数组?

给定一个整数数组和一个值N。将N表示为该数组的最小元素数之和。如何解决这个问题?

如何循环一个整数数组并将正负都保存到另一个数组中?

给定一个二维整数数组,我如何找到最高数字及其位置?

如何在Java中编写一个递归方法来反转存储在整数数组中的值?

如何创建一个动态的函数数组