为啥 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
采用一个范围,这比拥有一个采用自己的容器类型的函数要通用得多。如果vector
有append(const vector&)
,那么list::append? Should it take a
vector` 或list
的适当签名是什么?
【参考方案1】:
这是一个很好的理由。实际上,作为一个恰当的例子,我认为您对“附加”的含义有误。我希望它等同于push_back
(存在),而您正在寻找更像“连接”的东西。
为什么没有concatenate
函数?嗯,本来可以的。但是标准不喜欢给你一些你并不真正需要的东西,而且(正如你所展示的)这个操作很容易自己实现。
【讨论】:
除insert
、erase
、begin
和end
之外的任何方法都可以应用相同的参数。除了这些方法之外,所有vector
实现起来都很简单,仍然提供了push_back
和size
,因为您不想在每个项目中重新实现常用的、琐碎的东西(可能具有不同的名称)。
@MatteoItalia:然后建议委员会。但除了我提出的问题之外,我看不出这是如何回答的。以上是关于为啥 std::vector 没有 append 方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 std::vector<bool> 没有 .data()?
为啥 std::vector 允许使用 [] 分配,但 size() 和 capacity() 没有改变?
为啥使用 std::vector 而不是 realloc? [关闭]
为啥从 std::vector 中随机删除比 std::list 快?