Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数组构造 我开发了一个C++容器容器,我意识到能够从数组中复制值是有帮助的。_C++_Arrays_Class - Fatal编程技术网

从数组构造 我开发了一个C++容器容器,我意识到能够从数组中复制值是有帮助的。

从数组构造 我开发了一个C++容器容器,我意识到能够从数组中复制值是有帮助的。,c++,arrays,class,C++,Arrays,Class,这两者的区别在于: myClass myInstance; myInstance += 2; myInstance += 4; myInstance += 8; myInstance += 16; 这是: myClass myInstance; int myArray[] = {2, 4, 8, 16}; myInstance = myArray; 显然,阵列结构要干净得多。但是,由于无法获取传递给函数的数组的大小(在本例中为运算符=),因此复制值是一个问题 我可以将大小作为参数与数组一起传

这两者的区别在于:

myClass myInstance;
myInstance += 2;
myInstance += 4;
myInstance += 8;
myInstance += 16;
这是:

myClass myInstance;
int myArray[] = {2, 4, 8, 16};
myInstance = myArray;
显然,阵列结构要干净得多。但是,由于无法获取传递给函数的数组的大小(在本例中为
运算符=
),因此复制值是一个问题

我可以将大小作为参数与数组一起传递,但这意味着我不能使用
运算符=

myInstance.getArrayValues(myArray, 4);
这比我们想象的要直观得多

myInstance = myArray;

像这样的事情通常是如何处理的?

最好的方法可能是使用迭代器,也就是说,给你的类一个模板函数,它接受第一个和最后一个迭代器,当然也可以使用指针

这样做的好处是,您可以从任何容器获取输入


或者,如果我没记错的话,您可以等待编译器中的C++0x支持,并利用新功能,允许使用初始化列表(如数组)进行构造。在那之前,我认为使用迭代器是一种可行的方法。

标准在
std::vector
模板类中处理迭代器(对于不改变大小/容量的C样式数组,TR1有一个
std::array
类)


std::vector
通过使用insert和assign函数实现您想要的功能(同样,不重载
运算符=
)。

实际上,您可以通过引用接受本机数组。下面是执行所需操作的赋值运算符的示例:

template <std::size_t N>
const myClass& operator=(const int(&arr)[N])
{
    // use arr as you do usually with arrays :)
    // N is the size of the array.
    return *this;
}
模板
常量myClass和运算符=(常量int(&arr)[N])
{
//像通常使用数组一样使用arr:)
//N是数组的大小。
归还*这个;
}

这个库就是为了解决这个问题而设计的。

只是出于好奇,你在写什么样的容器?@AraK只是一个用于学习的简单模板类。