向量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
答案
swap
按值获取其参数,因此局部变量b
只是参数的副本。任何修改(例如b.setVec(tmp);
)都与原始参数无关。
将其更改为通过引用,即
以上是关于向量int交换实现?的主要内容,如果未能解决你的问题,请参考以下文章