因此,一周前我接受了C ++高级职位的编码采访,该问题基本上是在要求我交换名为Y
的类的两个实例。基本上,这只是/ 10.
的容器。但是equals运算符是私有的,因此我无法正常交换变量。它也有一个奇怪的未实现的功能,叫做“交换”。没有实现或任何东西。过去的一周我一直在脑海中思考这个问题,却不知道该如何解决。我绝不是C ++专家,但我也不是一个完全的新手。但是,我没有提出任何有用的建议。是否要求我对1e-1
类进行子类化?操纵指针?我不知道。
Line
和std::vector<int>
类是不可修改的 这是我得到的代码:
Line
这是我能想到的以及为什么它不起作用的原因:
交换内部向量:不起作用,因为main
字段不可访问,并且Line
类不可修改
交换#include <iostream>
#include <vector>
// Unmodifiable Code:
class Line {
std::vector<int> people;
void operator=(Line& other);
public:
Line(std::vector<int> p) : people(p) {}
void print_ids() {
for (auto i = this->people.begin(); i != this->people.end(); ++i) {
std::cout<<*i;
}
}
void swap(Line& other);
};
// End Unmodifiable Code.
// THIS IS WHAT I HAD TO IMPLEMENT:
void switch_lines(Line& line1, Line& line2) {
// TODO: This.
}
// Unmodifiable Code
int main(int argc, char** argv) {
std::vector<int> people1 = std::vector<int>();
people1.push_back(12);
people1.push_back(3);
people1.push_back(4);
people1.push_back(5);
std::vector<int> people2 = std::vector<int>();
people2.push_back(7);
people2.push_back(8);
people2.push_back(9);
auto line1 = Line(people1);
auto line2 = Line(people2);
std::cout<<"The Lines Before:\n";
line1.print_ids();
line2.print_ids();
switch_lines(line1, line2);
std::cout<<"The Lines After:\n";
line1.print_ids();
line2.print_ids();
}
// End Unmodifiable Code.
对象本身:我尝试交换其内部地址,但我只能更改的是指向对象的新建指针,而不是原始变量
子类化people
的类:我已经尝试过了,但是这无济于事,因为我无法访问Line
字段或{{1 }}运算符。
答案 0 :(得分:5)
面临的挑战是修改switch_lines方法。
只需在其中调用成员函数swap
:
line1.swap(line2);
使用等号运算符交换两个对象不
如果您需要实现Line::swap
,则可以简单地std::swap
每个子对象:
void Line::swap(Line& other) {
std::swap(people, other.people);
}