Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么不+;=stl中的向量算子_C++_Stl - Fatal编程技术网

C++ 为什么不+;=stl中的向量算子

C++ 为什么不+;=stl中的向量算子,c++,stl,C++,Stl,我很好奇?不实施的背后是什么高fundu逻辑: result+=vector1; 其中result和vector1都是stl向量 注:我知道如何实现该位,但我需要知道设计STL的圣贤们在选择不实现该功能时使用的逻辑是什么?我认为运算符没有过载,因为其含义不明确。你的意思是附加向量吗result.insert(result.end()、vector1.begin()、vector1.end())实现了这一点。您希望结果包含什么,将原始结果与vector1或元素连接的结果(无论对底层类型意味着什么

我很好奇?不实施的背后是什么高fundu逻辑:

result+=vector1;
其中result和vector1都是stl向量


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

我认为运算符没有过载,因为其含义不明确。你的意思是附加向量吗
result.insert(result.end()、vector1.begin()、vector1.end())
实现了这一点。

您希望
结果
包含什么,将原始
结果
vector1
或元素连接的结果(无论对底层类型意味着什么),如果大小不匹配,是否可能初始化默认成员

是的,这是一个答案;)

运算符重载只应在操作的含义对于底层类型明确且实用的情况下使用,并在适当命名的函数调用上提供显著的符号简洁性

请注意,
valarray
由于其接口和预期用途,其运算符重载比
vector
多。

我的看法(主要基于)是Stepanov认为容器的重要性远远低于算法和迭代器。在他看来,算法是最重要的部分。迭代器是次要的,容器只是迭代器完成工作所需的存储

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

线性方程有四种 遍历:单次向前传递(an) 输入流),多路径转发(a 单链表),双向(a 双链表)和随机访问 (数组)

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


还有一些其他的论点需要提出,比如尽量减少重复和避免歧义,但我个人认为它们是次要的(充其量)。STL试图最大程度地推广算法。容器不再被强调,迭代器的一大部分(至少在我看来)是为了确保它们留在后台。

Boost.Assignment库实际上向
std::vector
和其他容器添加了
+=
操作符


yeouch。这不是唯一的办法,是吗
vec1.append(vec2)
将非常明确,但更加友好。对于您的工具箱:
template void append(C1&C1,C2 const&C2){C1.insert(C1.end(),C2.begin(),C2.end();}
。并非所有可能的函数都在STL中,而且有相当多的普通函数丢失,而支持更复杂的函数。例如,在使用Python和Numpy时,这可能是一个难题。在python中,+运算符连接列表,但在numpy数组中它是一个元素级加法。我希望更多的语言采用将加法和连接运算符分开的方法。我不明白!我的理解是C++中的抽象比实现更重要,那么STL为什么要关注实现,即不同类型的算法,而不是抽象的容器。我可以不使用CurntIf函数,但STL映射的键集功能更有用。C++和Python/java之间的一个明显区别就是,数据结构(如列表)和哈希图在以后更容易处理。