直接将数组作为输入的一部分

Posted

技术标签:

【中文标题】直接将数组作为输入的一部分【英文标题】: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';

【问题讨论】:

【参考方案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

【讨论】:

以上是关于直接将数组作为输入的一部分的主要内容,如果未能解决你的问题,请参考以下文章

AppSync,使用 graphql-tag 将数组作为输入参数传递

部分和查找/部分和集分配

快速多部分/表单数据上传,将字符串数组附加到正文(问题:数组作为字符串到服务器)

排序算法系列——直接插入排序

以角度形式将输入创建为数组

通过邮递员发送二维字节数组(多个文件)作为多部分请求