向量int交换实现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向量int交换实现?相关的知识,希望对你有一定的参考价值。

我对以下C ++向量交换代码有一个简单的问题:

#include <iostream>
#include <memory>
#include <vector>

using namespace std;

class Base
{
private:
    std::vector<int> vec;
public:
    Base(std::vector<int> v) : vec(v) {}

    std::vector<int> getVec() {
        return vec;
    }

    void setVec(std::vector<int> vec) {
        this->vec = vec;
    }

    void printVec() {
        for (auto &v : vec) {
            std::cout << v << std::endl;
        } 
    }

    void swap(Base b) {
        std::vector<int> tmp = vec;

        vec = b.getVec();

        b.setVec(tmp);
    }
};


int main()
{
    std::vector<int> v1 = {1, 2, 3, 4};
    std::vector<int> v2 = {5, 6, 7, 4};

    Base b1(v1);
    Base b2(v2);

    b1.swap(b2);

    b1.printVec();
    b2.printVec();

    return 0;
}

我希望程序能够打印(表明交换成功)

5                                                                                                                                                                                                                         
6                                                                                                                                                                                                                         
7                                                                                                                                                                                                                         
4                                                                                                                                                                                                                         
1                                                                                                                                                                                                                         
2                                                                                                                                                                                                                         
3                                                                                                                                                                                                                         
4 

但它打印

5                                                                                                                                                                                                                         
6                                                                                                                                                                                                                         
7                                                                                                                                                                                                                         
4                                                                                                                                                                                                                         
5                                                                                                                                                                                                                         
6                                                                                                                                                                                                                         
7                                                                                                                                                                                                                         
4 

所以看起来只有第一个向量正确交换了,而第二个向量却没有正确交换,此代码有什么问题?当我在交换函数中添加打印语句时,我感到困惑,因为它们似乎正确地交换了第二个向量,但随后超出范围了???

我对以下C ++向量交换代码有一个简单的问题:#include #include #include 使用命名空间std; class Base {private:std :: ......>

答案

swap按值获取其参数,因此局部变量b只是参数的副本。任何修改(例如b.setVec(tmp);)都与原始参数无关。

将其更改为通过引用,即

以上是关于向量int交换实现?的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现集合操作

c++ boost进程间交换(复制)非共享和共享字符串向量

我如何实现一个可以传递向量和 int * 的函数?

将类成员向量的内容复制到另一个向量中,然后将它们交换回来

实现向量的向量

实现一个函数来交换两个整数的内容(C语言代码练习)