- 主题:有没有可能给std::vector自定义一个operator=?
在等号语义之外增加太多东西了,非要用等号实现,必然带来很多别扭的地方,还很容易误用。
单独用一个函数实现多好
【 在 capriccio 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
:
--
FROM 222.129.2.*
这个用法不是我发明的。我是借鉴了eigen库,eigen应该是数值计算领域的准标准库了。
在数值计算领域,<< 用来给向量和矩阵赋值是标准操作。
OpenCV里面也有类似的用法。
【 在 easior 的大作中提到: 】
: 流操作符 operator << 的本意是要以某个流为返回值的
: 不说能不能实现楼主的需求!但这么重载显然不太好,
: 就像搞数学的完全不懂物理量的本意,把两个不相关的东西直接加起来了
: ...................
--
FROM 123.113.224.*
哦!但 operator << 没有返回值不太符合流特性
真要这么做,应该像 sstream 一样,搞一个“数据流”才自恰啊
【 在 dormouseBHU 的大作中提到: 】
: 这个用法不是我发明的。我是借鉴了eigen库,eigen应该是数值计算领域的准标准库了。
: 在数值计算领域,<< 用来给向量和矩阵赋值是标准操作。
: OpenCV里面也有类似的用法。
: ...................
--
FROM 120.253.228.*
那就改成
const std::vector<int>& operator << (std::vector<int> &b, A a)
【 在 easior 的大作中提到: 】
: 哦!但 operator << 没有返回值不太符合流特性
: 真要这么做,应该像 sstream 一样,搞一个“数据流”才自恰啊
:
--
修改:dormouseBHU FROM 223.104.42.*
FROM 223.104.42.*
感觉这个不错
【 在 dormouseBHU 的大作中提到: 】
: 这个操作不应该重载 = ,我觉得用 << 更合适。
: void operator << (std::vector<int> &b, A a)
: {
: ...................
--
FROM 120.244.84.*
函数实现当然没问题,就是太难看,因为我要实现的这个语义用=来表达是清晰并准确的,用函数就会觉得很别扭。
【 在 booster123 的大作中提到: 】
: 在等号语义之外增加太多东西了,非要用等号实现,必然带来很多别扭的地方,还很容易误用。
: 单独用一个函数实现多好
--
FROM 120.244.84.*
没看出来哪里“清晰并准确”了
复用b的已分配内存,这就不是等号语义本身能包含的
【 在 capriccio 的大作中提到: 】
: 函数实现当然没问题,就是太难看,因为我要实现的这个语义用=来表达是清晰并准确的,用函数就会觉得很别扭。
:
--
FROM 222.129.2.*
vector<int> 的内存是不可被外部操控的,你这个想法就是错的。
如果想共享或者移动内存就不应该用vector
【 在 capriccio 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
:
--
FROM 106.37.206.*