为啥 std::vector 没有 append 方法? [关闭]

Posted

技术标签:

【中文标题】为啥 std::vector 没有 append 方法? [关闭]【英文标题】:Why does std::vector not have an append method? [closed]为什么 std::vector 没有 append 方法? [关闭] 【发布时间】:2017-06-08 21:05:43 【问题描述】:

将一个向量附加到另一个向量(根据Concatenating two std::vectors)的建议是使用:

vector1.insert( vector1.end(), vector2.begin(), vector2.end() );

为什么vector没有类似的方法:

vector1.append(vector2);

我想到的唯一原因是可能不清楚 append 到底是做什么的。

【问题讨论】:

为什么你需要另一种方式来做你已经可以做的事情? 它不存在没有技术原因。这是一个你想要一个功能齐全(有些人会说臃肿)的界面还是一个简短而简洁(有些人会说不完整)的界面的问题。这是一个偏好问题。 可能是因为append 只是insert 的一个特例。 insert 可以做的远不止是把某事放在某事的末尾。 因为,基本上,STL 流量在范围而不是容器中。容器是管理范围的便捷方式,但范围是基础。 insert 采用一个范围,这比拥有一个采用自己的容器类型的函数要通用得多。如果vectorappend(const vector&),那么list::append? Should it take a vector` 或list 的适当签名是什么? 【参考方案1】:

这是一个很好的理由。实际上,作为一个恰当的例子,我认为您对“附加”的含义有误。我希望它等同于push_back(存在),而您正在寻找更像“连接”的东西。

为什么没有concatenate 函数?嗯,本来可以的。但是标准不喜欢给你一些你并不真正需要的东西,而且(正如你所展示的)这个操作很容易自己实现。

【讨论】:

inserterasebeginend 之外的任何方法都可以应用相同的参数。除了这些方法之外,所有vector 实现起来都很简单,仍然提供了push_backsize,因为您不想在每个项目中重新实现常用的、琐碎的东西(可能具有不同的名称)。 @MatteoItalia:然后建议委员会。但除了我提出的问题之外,我看不出这是如何回答的。

以上是关于为啥 std::vector 没有 append 方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::vector<bool> 没有 .data()?

为啥 std::vector 允许使用 [] 分配,但 size() 和 capacity() 没有改变?

为啥使用 std::vector 而不是 realloc? [关闭]

为啥从 std::vector 中随机删除比 std::list 快?

为啥在 C++11 中更改了 std::vector::resize 签名?

为啥 std::vector::resize(n, src) 按值传递?