swap可以用在数组上吗?该如何解决
swap可以用在数组上吗?
是否可以?swap可以用在关联容器上,为什么swap_ranges就不可以?
------解决方案--------------------
你说的数组是原生的数组还是 std::vector?
std::vector 可以, 原生的 int x[10]; 这种就不行.
swap 可以用于所有支持 = 操作的类型上, 原生数组显然不能使用 x = ... 的操作.
------解决方案--------------------
swap不会改变容器内的值,改变的只是迭代器的值。
swap_range会改变容器内的值,也就是所谓的更易型算法。
更易型算法是不能用在关联式容器上的。
关于stl的任何疑问参考《C++标准程序库》《stl源码剖析》侯捷译。
------解决方案--------------------
你可以简单的这么想,(下面伪代码,方便理解)
调用swap()后
it1.m_pData = arr[1];
it2.m_pData = arr[0];
改变的只是迭代器,并没有改变容器arr内的值。
是否可以?swap可以用在关联容器上,为什么swap_ranges就不可以?
------解决方案--------------------
你说的数组是原生的数组还是 std::vector?
std::vector 可以, 原生的 int x[10]; 这种就不行.
swap 可以用于所有支持 = 操作的类型上, 原生数组显然不能使用 x = ... 的操作.
------解决方案--------------------
swap不会改变容器内的值,改变的只是迭代器的值。
swap_range会改变容器内的值,也就是所谓的更易型算法。
更易型算法是不能用在关联式容器上的。
关于stl的任何疑问参考《C++标准程序库》《stl源码剖析》侯捷译。
------解决方案--------------------
你可以简单的这么想,(下面伪代码,方便理解)
class iterator
{
int* m_pData;
}
Array arr = {1, 2, 3}
iterator it1; it1.m_pData = arr[0];
iterator it2; it2,m_pData = arr[1];
swap(it1, it2);
调用swap()后
it1.m_pData = arr[1];
it2.m_pData = arr[0];
改变的只是迭代器,并没有改变容器arr内的值。