- 主题:有没有可能给std::vector自定义一个operator=?
比如我自己写了一个类A,我想写一个operator=,实现:
A a;
vector<int> b;
//省略一些代码
b=a;
--
FROM 120.244.84.*
在类 A 里实现一个类型转换成员函数
operator vector<int>()const;
不知道这样行不行?
【 在 capriccio 的大作中提到: 】
: 比如我自己写了一个类A,我想写一个operator=,实现:
: A a;
: vector<int> b;
: ...................
--
修改:easior FROM 120.253.228.*
FROM 120.253.228.*
有道理!
【 在 easior 的大作中提到: 】
: 标 题: Re: 有没有可能给std::vector自定义一个operator=?
: 发信站: 水木社区 (Sat May 11 11:44:24 2024), 站内
:
: 在类 A 里实现一个类型转换成员函数
: operator vector<int>()const;
: 不知道这样行不行?
: 【 在 capriccio 的大作中提到: 】
: : 比如我自己写了一个类A,我想写一个operator=,实现:
: : A a;
: : vector<int> b;
: : ...................
:
: --
: --- 老子 道德经
:
:
: ※ 修改:·easior 于 May 11 13:31:39 2024 修改本文·[FROM: 120.253.228.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.253.228.*]
--
修改:easior FROM 120.253.228.*
FROM 120.244.84.*
又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
【 在 easior 的大作中提到: 】
: 标 题: Re: 有没有可能给std::vector自定义一个operator=?
: 发信站: 水木社区 (Sat May 11 11:44:24 2024), 站内
:
: 在类 A 里实现一个类型转换成员函数
: operator vector<int>()const;
: 不知道这样行不行?
: 【 在 capriccio 的大作中提到: 】
: : 比如我自己写了一个类A,我想写一个operator=,实现:
: : A a;
: : vector<int> b;
: : ...................
:
: --
: --- 老子 道德经
:
:
: ※ 修改:·easior 于 May 11 13:31:39 2024 修改本文·[FROM: 120.253.228.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.253.228.*]
--
修改:easior FROM 120.253.228.*
FROM 120.244.84.*
这个我就不懂了!要不去某个 IRC 频道问问
有一次在上面问问题,正好碰上了 vector 的作者(之一?)
【 在 capriccio 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
--
修改:easior FROM 120.253.228.*
FROM 120.253.228.*
【 在 capriccio 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
:
你这是需要一个move 拷贝。 也就是带move功能的拷贝构造函数,
vector本身有一个swap的功能, 如果你的类里面有对应的vector<int>成员,
可以在move拷贝的时候, 做相应的swap的就可以了。
--
FROM 115.171.244.*
+1
【 在 poggy 的大作中提到: 】
:
: 你这是需要一个move 拷贝。 也就是带move功能的拷贝构造函数,
: vector本身有一个swap的功能, 如果你的类里面有对应的vector<int>成员,
: ...................
--
FROM 114.249.20.*
这个操作不应该重载 = ,我觉得用 << 更合适。
void operator << (std::vector<int> &b, A a)
{
////
}
用的时候写为 b << a;
【 在 capriccio 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
:
--
FROM 123.113.224.*
流操作符 operator << 的本意是要以某个流为返回值的
不说能不能实现楼主的需求!但这么重载显然不太好,
就像搞数学的完全不懂物理量的本意,把两个不相关的东西直接加起来了
或许这是天才的想法
【 在 dormouseBHU 的大作中提到: 】
: 这个操作不应该重载 = ,我觉得用 << 更合适。
: void operator << (std::vector<int> &b, A a)
: {
: ...................
--
FROM 120.253.228.*
这种适合搞一个函数,清晰些
另外可以参考std::transform
【 在 capriccio (小草|长相守) 的大作中提到: 】
: 又想了一下,其实我的主要目的是a转换为b的过程中,把a里的数据计算后直接填充到b已经占用的内存中,以提升性能。
: 你说的这个类型转换函数相当于是要在类型转换函数中新建一个vector<int>的对象c,申请好内存,把a里的数据计算后填充到c中,类型转换函数返回c,然后再执行拷贝。哪怕最后用的是移动语义,省去了拷贝的开销,也还有销毁b已有的内存加上申请c所需内存的开销。
:
: 【 在 easior 的大作中提到: 】
--
FROM 183.179.53.*