繁体   English   中英

C ++ 11 STL中的容器

[英]Containers in C++11 STL

struct Solution {
  double power_peak;
  valarray<int> assignment;
};
list<Solution> list;
list.pop_back();

list<Solutions *> list2;
list2.pop_back();
function(list2);

您好,我仍然不了解这些容器如何针对其内容工作。 假设他们之前被填补。 当我在第一个列表上调用pop_back时。 当我在第二个列表上调用pop_back时,我假设一切都被破坏了(包括Valarray中的int)。 内容仍将保留。

当我做一个函数调用。 列表的行为就像指向数组的指针吗? 因此仅复制了指针,但它们仍指向相同的内容。

这个对吗?

向量或valarray在复制方面会表现出其他行为吗?

当您从list pop_back()元素或任何支持pop_back()的序列容器时,它将始终导致最后一个元素的破坏。 区别在于,在第二种情况下, list包含指针,而指针的析构函数为NOP。 这就是指针所指向的内容仍然存在的原因。

这也是将原始指针插入容器的原因。 这意味着您必须手动管理内存,这很容易出错。 使用list<unique_ptr<T>>或其他一些智能指针,意味着您不再需要手动内存管理。

当我做一个函数调用。 列表的行为就像指向数组的指针吗? 因此仅复制了指针,但它们仍指向相同的内容。

这取决于函数的定义方式。 如果是以下之一:

return_type function(list_type&);
return_type function(list_type const&);

没有副本。 对列表的引用将传递给函数。 另一方面,如果定义为:

return_type function(list_type);

那么该列表将被复制。

当我做一个函数调用。 列表的行为就像指向数组的指针吗?

不,它的行为就像一个指向对象的指针列表。 就是这样。

因此仅复制了指针,但它们仍指向相同的内容。

正确。

我假设一切都被破坏了(包括Valarray中的int)

如您在这里所读到的那样, pop_back会破坏序列容器中的最后一个元素,如果它是一个类,那么不言而喻也将破坏其成员。

当我在第二个列表上调用pop_back时。 内容仍将保留。

由于指针不灵巧,因此它们不拥有指向的对象。 因此,如果销毁指针,则该对象不会受到影响。

暂无
暂无

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

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