为什么stl中的向量没有+ =运算符

时间:2010-03-21 22:01:04

标签: c++ stl

我很好奇吗?没有实施的背后有什么高的基础逻辑:

result+=vector1;

其中result和vector1都是stl向量。

注意:我知道如何实现该位,但我需要知道什么逻辑,设计STL的圣人在选择不实现此功能时正在使用?

4 个答案:

答案 0 :(得分:17)

您希望result包含什么,将原始resultvector1或元素明细+=连接起来的结果(对于基础类型无关紧要) ),如果尺寸不匹配,可能会默认初始化成员?

是的,这是一个答案;)。

运算符重载只应在操作含义明确且对于基础类型实用且在适当命名的函数调用中提供显着的符号简洁的情况下使用。

请注意,valarray由于其界面和预期用途而具有比vector更多的运算符重载。

答案 1 :(得分:3)

我认为运算符没有重载,因为它的含义不明确。你的意思是附加向量吗? result.insert( result.end(), vector1.begin(), vector1.end() )完成了这一点。

答案 2 :(得分:2)

我对事物的看法(基本上基于 Elements of Programming )是Stepanov认为容器比算法和迭代器重要得多。从他的观点来看,算法是最重要的部分。迭代器是次要的,容器只是迭代器完成工作所必需的存储空间。

在书中,他从一些基础知识开始,比如对象和变换。第六章主要致力于迭代器(实际上,“迭代器”是本章的名称)。这也几乎只提到了书中的容器:

  

有四种线性   遍历:单传(前锋)   输入流),多向前传(a   单链表),双向(a   双向链表)和随机访问   (数组)。

我记得他提到容器的唯一另一个地方是指出特定类型(“可线性化”)不是容器,因为它不拥有其内容。

还有一些其他的论点要做,例如尽量减少重复和避免含糊不清,但我个人认为它们是次要的(充其量)。 STL试图尽可能地推广算法。容器不再强调,迭代器的很大一部分(或者至少对我来说似乎是)确保它们留在后台。

答案 3 :(得分:0)

事实上,Boost.Assignment库会向+=和其他容器添加std::vector运算符。

http://www.boost.org/doc/libs/1_42_0/libs/assign/doc/index.html