C++ 如何声明包含整数数组的对象

C++ 如何声明包含整数数组的对象,c++,arrays,class,c++11,pointers,C++,Arrays,Class,C++11,Pointers,(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];

(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
谢谢你的帮助

我想声明一个包含整数数组的对象 类似这样的东西:(伪代码)“arr1da1[]={1,2,3,4,5};”这个 应该这样打印:“arr:1 2 3 4 5尺寸: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...

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


编辑:正如@M.M提到的通过值而不是引用传递
std::initializer\u list
是合适的,编辑了类的构造函数

可能重复的
arr1D(int a[])
将不起作用,
a
在这个上下文中是一个指针,并且丢失了大小,请查看
std::vector
是如何做的,甚至是如何使用
std::vector
而不是我从未使用过vector,现在我正试图用那种方式解决它。有什么想法吗?不相关,distructor在哪里?“我还没用过vector”现在开始使用
vector
还不早。只是忘了存在
[]
数组。另外,创建对象不需要
new
<代码>标准::向量a1={1,2,3,4,5}是您所需要的全部
std::initializer\u list
应该按值传递@谢谢你的回答。这对我来说很有趣
const&
实际上是我的习惯,但它不适合任何地方。我会编辑它。
#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;
}