所以我在一周前进行了一次编码访谈,以获得高级C++职位,其中的问题基本上是要求我交换一个名为的类的两个实例Line.这基本上只是一个容器std::vector<int>.但是equals运算符是私有的,所以我无法正常交换变量.它还有一个奇怪的未实现的功能,称为"交换"就在那里.没有实施或任何事情.过去一周,我一直在思考如何处理这个问题.我不是一个c ++专家,但我也不是一个完整的新手.然而,我没有提出任何有用的东西.它是否要求我继承该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.
Run Code Online (Sandbox Code Playgroud)
这是我能想到的以及为什么它不能工作:
交换内部向量:不起作用,因为该people字段不可访问且Line类是不可修改的
交换Line对象本身:我已经尝试交换它们的内部地址,但我可以更改的是新创建的指向对象的指针,而不是原始变量
对Line类进行子类化:我已经尝试过,但它没有帮助,因为我无法访问该people字段或=运算符.
挑战是修改switch_lines方法.
只需在swap那里调用成员函数:
line1.swap(line2);
Run Code Online (Sandbox Code Playgroud)
在不使用equals运算符的情况下交换两个对象
如果需要实现Line::swap,可以简单地使用std::swap每个子对象:
void Line::swap(Line& other) {
std::swap(people, other.people);
}
Run Code Online (Sandbox Code Playgroud)