【问题标题】:Is there any way my class take input value like array in C++?我的班级有什么办法可以像 C++ 中的数组一样获取输入值吗?
【发布时间】:2022-01-25 17:06:05
【问题描述】:

我想写一个类并像数组一样获取输入值

int arr[] = {1,2,3,4}
myFunc f = {a,b,c,d};

我的类有什么方法可以像 C++ 中的数组一样获取输入值吗?

【问题讨论】:

标签: c++ arrays function class operator-overloading


【解决方案1】:

这就是std::initializer_list 的用途:

#include <vector>
#include <iostream>

class foo {
private:
    std::vector<int> nums_;
public:
    foo(std::initializer_list<int> init) :
        nums_(init.begin(), init.end())
    {}

    void display() {
        for (auto n : nums_) {
            std::cout << " " << n;
        }
        std::cout << "\n";
    }
};

int main()
{
    foo f = { 1,2,3,4 };
    f.display();
    return 0;
}

【讨论】:

    【解决方案2】:

    您可以尝试将指针传递给数组,例如:

    class B
    {
    public:
        B(int* arr, const size_t len)
        {
            // Bad way:
            // this->arr = arr;
            // this->len = len;
            
            // Better:
            this->arr = new int[len];
            this->len = len;
            
            for (int i = 0; i < len; i++)
            {
                this->arr[i] = arr[i];
            }
        }
    
        ~B()
        {
            // Don't forget to free unused dynamic memory:
            delete[] this->arr;
        }
        
        void printArray() const 
        {
            for (int i = 0; i < this->len; i++)
            {
                std::cout << this->arr[i] << " ";
            }
            
            std::cout << std::endl;
        }
        
        int* arr;
        size_t len;
    };
    
    
    int main()
    {
        int* arr = new int[10];
        
        for (int i = 0; i < 10; i++)
        {
            arr[i] = i + 1;
        }
        
        B b(arr, 10);
        
        b.printArray();
        
        delete[] arr;
    
        return 0;
    }
    

    但问题是它不是内存安全的,也不是那么有用,因为 CPP 的标准库提供了更好的解决方案。 例如,您可以使用std::vector

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2020-10-18
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多