直接将数组作为输入的一部分
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 将数组作为输入参数传递