C++:复制 boost::array

3

假设我有

boost::array<std::set<std::string>, 100000> arr1, arr2;

在填充了arr1之后,我执行arr2=arr1

这是否像stl容器那样复制所有元素到arr2中,还是只是改变了arr2指针指向与arr1相同的数组?

如果第一个选项是正确的,当我按值传递arr1给函数时会发生什么?


1
它会复制所有元素。当你按值传递 arr1 时,你会创建一个副本(除非有复制省略的范围,但这似乎不太可能)。 - juanchopanza
那么,即使按值传递,所有元素也都会被复制? - Subway
谢谢。你能提供一份文档参考吗? - Subway
请参考@jessegood的答案。标准库容器(包括std::array)也是如此。容器拥有自己的副本,这意味着当它们被复制时,每个副本都必须拥有其内容,这意味着需要复制内容。 - juanchopanza
1个回答

5

这里有一个参考文献:

template<typename U> array& operator=(const array<U, N>& other);

Effects:
    std::copy(rhs.begin(),rhs.end(), begin())

请注意Effects是什么。如果您的实现支持,还应考虑使用std::array而不是boost::array

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接