【 在 granis 的大作中提到: 】
: swap能交换出片段的地址么?
: 移动copy是有可行性
: 能否给个例子?
: ...................
你的需求我理解就是取vector的一部分, 就假定是连续的部分吧
一种是元素太大, 比如是对象, 那么可以考虑用move构造
auto v = std::vector<std::string>({"1", "2", "3", "4", "5" });
auto & v2 =std::vector<std::string>(std::make_move_iterator(v.begin()+2),std::make_move_iterator(std::end(v)));
v2 变成{"3", "4", "5" }, 这三个元素对象, 是接管了v的
v则变成{"1", "2", "", "", "" }, 三个对象被交换成空的string
v的元素是string对象, v2构造的化, 会用空对象, 交换掉v中对应索引的string对象
这样可以减少大量的元素构造析构。
不过, 这种情况可能不适用POD对象, 比如vector<int> 实际上还是要拷贝分配空间拷贝
对象, 也会拷贝, 不过只是拷贝对象的索引指针。
如果, 对象不多,可以erase掉多余的元素, 这个调用类似move的内存拷贝,可能会移动元素指针,
不过, 如果是一次连续操作,也许可以接受。
swap就是两个vector交换内容
auto v = std::vector<std::string>({"1", "2", "3", "4", "5" });
auto v2 = std::vector<std::string>({"x", "y", "z"});
v2.swap(v), 那么v管理{"x", "y", "z"}
v2则管理 {"1", "2", "3", "4", "5" }
又是可以定义一个空vector,取接管其它vector。
--
修改:poggy FROM 124.126.2.*
FROM 124.126.2.*