C++中的三个交换函数swap、swap_ranges、iter_swap

有三个交换函数,swap、swap_ranges、iter_swap

其中需要注意的是容器和数组虽然都可以充当存放元素的数据类型,但是两个不同的概念,之间的区别是可以将容器看成基本的数据类型,可以像处理基本的数据类型一样来处理容器,比如直接赋值,或者当成参数传递给函数做形参;但是数组有所不同,数组是一个包括有很多元素的数据类型,不能像处理基本数据类型那样直接对数组进行操作,需要借助指针。所以之间的区别也体现在了这三个交换函数的使用上面;

(1)基本数据类型可以使用swap、iter_swap两个函数

(2)基本序列容器可以使用swap、iter_swap、swap_ranges三个函数

(3)数组只能使用swap_ranges。

另外需要注意的是:

数组的大小是固定的,不可能动态的变化,因此int a[5]全部数据不能和int b[8]的全部数据进行交换;但是对基本序列容器而言,由于它支持元素空间动态分配,因此相交换的容器拥有的元素内存空间可以是不同的,所以两个具有不同容量的基本序列容器可以交换,比如vector<int>v1(10)可以和vector<int>v2(3)交换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
c++swap操作可以用来交换两个相同类型容器的内容。例如,使用swap函数可以交换两个vector容器的内容。代码示例如下: ``` #include <vector> #include <iostream> int main() { std::vector<std::string> vec1(10); std::vector<std::string> vec2(24); swap(vec1, vec2); return 0; } ``` 上述代码,我们创建了两个vector容器vec1和vec2,并分别初始化它们的大小为10和24。然后使用swap函数交换了它们的内容。这样,vec1的内容变为原来的vec2的内容,vec2的内容变为原来的vec1的内容。 此外,还有一种使用boost库迭代器的swap操作的用法示例。代码示例如下: ``` #include <bits/stdc++.h> #include "boost/iterator/iterator_adaptor.hpp" using namespace std; template<typename P> class array_iter:public boost::iterator_adaptor<array_iter<P>,P> { static_assert( is_pointer_v<P> ); //保证P是一个指针 public: using super_type = typename array_iter::iterator_adaptor_; array_iter(P x):super_type(x){} //必要的构造函数 }; int main() { int a = {1, 2, 3}; array_iter<int*> start(a); array_iter<int*> finish(a + 10); start = 1; copy(start, finish, ostream_iterator<int>(cout)); return 0; } ``` 上述代码,我们使用了boost库iterator_adaptor来自定义了一个array_iter迭代器类。它是array_iter类的一个模板,并继承自iterator_adaptor。在main函数,我们创建了一个int类型的数组a,并使用array_iter迭代器来遍历这个数组。在这个示例,我们将数组的每个元素都设置为1,然后使用copy函数将数组的元素输出到标准输出流。 因此,c++swap操作可以用于交换容器的内容,而迭代器可以用于遍历和访问容器的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [c++迭代器](https://blog.csdn.net/TOPEE362/article/details/126201656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++-swap](https://blog.csdn.net/mrbone11/article/details/121171745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱听雨声的北方汉

你的鼓励是我努力前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值