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

Qua*_*ees -2 c++

所以我在一周前进行了一次编码访谈,以获得高级C++职位,其中的问题基本上是要求我交换一个名为的类的两个实例Line.这基本上只是一个容器std::vector<int>.但是equals运算符是私有的,所以我无法正常交换变量.它还有一个奇怪的未实现的功能,称为"交换"就在那里.没有实施或任何事情.过去一周,我一直在思考如何处理这个问题.我不是一个c ++专家,但我也不是一个完整的新手.然而,我没有提出任何有用的东西.它是否要求我继承该Line课程?操纵指针?我没有线索.

关闭和downvoting问题之前,请注意mainLine类是不可修改

这是我得到的代码:

#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字段或=运算符.

eer*_*ika 5

挑战是修改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)

  • @QuantumHoneybees所以,调用成员函数.有什么问题? (4认同)