C ++-使用equals运算符*不*交换两个对象

时间:2018-10-09 16:17:10

标签: c++

因此,一周前我接受了C ++高级职位的编码采访,该问题基本上是在要求我交换名为Y的类的两个实例。基本上,这只是/ 10.的容器。但是equals运算符是私有的,因此我无法正常交换变量。它也有一个奇怪的未实现的功能,叫做“交换”。没有实现或任何东西。过去的一周我一直在脑海中思考这个问题,却不知道该如何解决。我绝不是C ++专家,但我也不是一个完全的新手。但是,我没有提出任何有用的建议。是否要求我对1e-1类进行子类化?操纵指针?我不知道。

在关闭并拒绝该问题之前,请注意, Linestd::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 }}运算符。

1 个答案:

答案 0 :(得分:5)

  

面临的挑战是修改switch_lines方法。

只需在其中调用成员函数swap

line1.swap(line2);
  

使用等号运算符交换两个对象

如果您需要实现Line::swap,则可以简单地std::swap每个子对象:

void Line::swap(Line& other) {
    std::swap(people, other.people);
}