从数组构造 我开发了一个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只是一个用于学习的简单模板类。