如何将数组直接传递给C ++构造函数

问题描述 投票:0回答:1

所以我写了这个C ++类来存储数组:

#include<bits/stdc++.h>
using namespace std;

class Array
{
    private:
        int size;
        int *A = new int[size];
        int length;
    public:
        Array(int arr[],int sz = 10)
        {
            length = sz;
            size = 10;
            for(int i=0;i<length;i++)
                A[i] = arr[i];
        }
        ~Array()
        {
            delete []A;
        }
    void Display();
    void Insert(int index, int x);
};

void Array::Display()
{//code}

void Array::Insert(int index, int x)
{//code}

int main()
{
    int a[3] = {1,2,3};
    Array arr(a, 3);
    arr.Display();
    arr.Insert(1,4);
    arr.Display();
}   

这很好。但是在main()函数中:

int main()
{
    int a[3] = {1,2,3};
    Array arr(a, 3);
    arr.Display();
} 

我正在将指针传递给Class构造函数中的数组a。有没有办法像这样传递数组?

Array arr({1,2,3}, 3);
c++
1个回答
0
投票

您可能需要使用类似这样的内容。但是请注意,此代码仍不是最佳代码,通常使用std :: vector或在某些情况下使用std :: array更好。

#include <initializer_list>    

class Array
{
private:
    int *m_data = nullptr;
    int m_size = 0;
    int m_capacity = 0;   
public:
    Array(int arr[], int sz = 10) {
        m_size = sz;
        m_capacity = sz;
        m_data = new int[m_capacity];
        for(int i=0; i < m_size; i++) {
            m_data[i] = arr[i];
        }
    }
    Array(const std::initializer_list<int> &il) {
        m_size = il.size();
        m_capacity = il.size();  
        m_data = new int[m_capacity];
        auto it = il.begin();
        for (int i = 0; i < m_size; ++i) {
            m_data[i] = *it;
            ++it;
        }
    }
    ~Array() {
        delete [] m_data;
    }

    int size() const { return m_size; }
    bool empty() const { return m_size == 0; }

    int& operator[](int id) { return  m_data[id]; }
    int operator[](int id) const { return  m_data[id]; }
};



#include <cstdio> // for printf

int main() {
    Array arr({1,2,3});

    printf(" %i \n",arr.size());
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.