【问题标题】:Make array part of input directly直接将数组作为输入的一部分
【发布时间】:2021-08-29 01:10:38
【问题描述】:

我正在尝试编写自己的向量。我必须先初始化一个数组,然后将向量的值设置为数组(块 2)。如何结合这两个步骤(第 3 块)?

template <class T>
class Test{
public:
    T value

    Test operator= (T list[]){
      ...//value = list[2]
      ...
      ...
      ...//do stuff to make array
      return 0;
    }
}
int main() {
  int testarr[] = {0, 12, 23};
  Test<int> vect = testarr;
  std::cout << vect.get(2) << '\n';
}
int main() {
  Test<int> vect = {0, 12, 23};
  std::cout << vect.get(2) << '\n';
}

【问题讨论】:

    标签: c++ class


    【解决方案1】:

    定义一个以std::initializer_list为参数的构造函数。

    您还需要实现Rule of 3/5/0

    试试这样的:

    template <class T>
    class Test{
    private:
        T *value = nullptr;
        size_t count = 0;
    
    public:
        Test() = default;
    
        Test(const Test &src)
        {
            value = new T[src.count];
            std::copy_n(src.value, src.count, value);
            count = src.count;
        }
    
        Test(Test &&src)
        {
            value = src.value; src.value = nullptr;
            count = src.count; src.count = 0;
        }
    
        Test(std::initializer_list<T> list)
        {
            value = new T[list.size()];
            std::copy_n(list.begin(), list.size(), value);
            count = list.size();
        }
    
        ~Test()
        {
            delete[] value;
        }
    
        Test& operator=(T rhs)
        {
            std::swap(value, rhs.value);
            std::swap(count, rhs.count);
            return *this;
        }
    
        T& get(size_t index)
        {
            return value[index];
        }
    };
    

    【讨论】:

      【解决方案2】:

      您需要为具有“initializer_list”参数的类创建初始化器。

      Test(const std::initializer_list<T>& Initializer);
      

      那你需要实现它

      Test<T>::Test(const std::initializer_list<T> &Initializer)
      {
          //InnerArray = new T[Initializer.size()];
          
          int i = 0;
          // There is no indexer for initializer_list
          for (T Elem : Initializer)
          {
              InnerArray[i] = Elem;
              ++i;
          }
      }
      

      之后就可以做类似的事情了

      Test<int> vector1 = {1, 2, 3, 4, 5};
      Test<int> vector2({1, 2, 3, 4, 5});
      

      Check more details here

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 2015-02-01
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        相关资源
        最近更新 更多