C++STL中swap函数操作与内存地址改变的简析

个人博客链接:C++ STL中swap函数操作与内存地址改变的简析 | Iwts’s blog

写在前面

这篇文章主要讨论了STL中swap函数在交换2个容器的内容的时候是交换内存还是交换元素的问题。由于博主对C++的学习并不好,如果有什么错误恳请大家提出。下面会有一些代码展示一下swap函数在对容器进行交换的时候对内存地址的影响,感兴趣的同学也可以自己写一下代码,会更加直观理解swap函数。

N年不写cpp了,贴一个评论

首先你的string打印地址的方式有问题 要么你用printf("%p")来输出,如果用cout的话需要这样,static_cast<void*>(&a[0]),其次,当然是会交换指针的,不然一个很大的string对象swap岂不是要赋值,那不就太扯淡了吗,只不过问题在 string内部不全是放在堆上的,比如windows下会有个char buf[16] 当字符串长度小于16的时候是放在栈上的,那样的话 swap就只能拷贝了,但是超过16个字节,就放在堆上,就会有交换 比如代码如下:

{
        std::string a("abc");
        std::string b("def");
 
        std::cout<<static_cast<void*>(&a[0])<<std::endl;
        std::cout<<static_cast<void*>(&b[0])<<std::endl;
 
        a.swap(b);
        std::cout<<static_cast<void*>(&a[0])<<std::endl;
        std::cout<<static_cast<void*>(&b[0])<<std::endl;
    }
    {
        std::string a("askdflsdjfsdljfsdlkfjslfjsdlfjkalsjfsdlfkjsdflsjdflsdkjeljrqlwekj
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值