繁体   English   中英

从数组构造

[英]Construction from Array

我正在为C ++开发一个简单的容器类,我意识到能够从数组中复制值会很有帮助。

两者之间的区别在于:

myClass myInstance;
myInstance += 2;
myInstance += 4;
myInstance += 8;
myInstance += 16;

和这个:

myClass myInstance;
int myArray[] = {2, 4, 8, 16};
myInstance = myArray;

显然,阵列结构要清洁得多。 但是,由于您无法获得传递给函数的数组的大小(在这种情况下为operator= ),因此复制值是一个问题。

我可以将size与数组一起作为参数传递,但这意味着我不能使用operator=

myInstance.getArrayValues(myArray, 4);

远不如直观

myInstance = myArray;

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

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

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;
}

最好的方法可能是使用迭代器,即为您的类提供一个包含第一个和最后一个迭代器的模板化函数,该函数当然也可以使用指针。

好处是您将可以从任何容器中获取输入。

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

Boost.Assignment库旨在解决此问题。

该标准在std::vector模板类中进行处理(TR1的std::array类用于不更改大小/容量的C样式数组)。

std::vector通过使用insert和Assign函数完成了您想要的(再次,不重载operator= )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM