Java到C++的转换

Java to C++ conversion

本文关键字:转换 C++ Java      更新时间:2023-10-16

我正在尝试将一些java代码转换为c++,但是,我在java的list.add与c++list.insert之间遇到了问题。以下是我已经开始转换的java代码:

public class SimulationQueue {
    private String arrivalFilePath;
    private int currentTime;
    private class Event {
        private boolean arrival;
        private int start;
        private int span;
        public Event() {
            this.arrival = true;
            this.start = 0;
            this.span = 0;
        }
        public Event(boolean isArrival, int startTime, int span) {
            this.arrival = isArrival;
            this.start = startTime;
            this.span = span;
        }
        public int at() { return start; }
        public boolean isArrival() { return arrival; }
        public int duration() { return span; }
        public void getArrivalEvent(Scanner arrivalFile) {
            this.arrival = true;
            this.start = arrivalFile.nextInt();
            this.span = arrivalFile.nextInt();
        }
    }
    public SimulationQueue(String arrivalFilePath) {
        this.arrivalFilePath = arrivalFilePath;
        this.currentTime = 0;
    }
    private void addEventToList(Event event, List<Event> eventList) {
        if (eventList.isEmpty()) eventList.add(0, event);
        else if (eventList.get(0).at() < event.at()) eventList.add(event);
        else eventList.add(0, event);
    }

这是迄今为止转换的c++版本:

struct EventList {
    bool arrival;
    int start, span, currentTime;
    string arrivalFilePath;
    EventList(bool isArrival, int startTime, int span);
    void getArrivalEvent(istream& arrivalFile);
    void simulationQueue (string arrivalFilePath);
    void addEventToList(EventList& event, list<EventList> eventList);
    void simulate();
    EventList() {
    this->arrival = true;
    this->start = 0;
    this->span = 0;
    }
    int at() {
        return start;
    }
    bool isArrival() {
        return arrival;
    }
    int duration() {
        return span;
    }
};
EventList::EventList(bool isArrival, int startTime, int span) {
    this->arrival = isArrival;
    this->start = startTime;
    this->span = span;
}
void EventList::getArrivalEvent(istream& arrivalFile) {
    this->arrival = true;
    int first = this->start;
    int duration = this->span;
    arrivalFile >> first;
    arrivalFile >> duration;
}
void EventList::simulationQueue (string arrivalFilePath) {
    this->arrivalFilePath = arrivalFilePath;
    this->currentTime = 0;
}
void EventList::addEventToList(EventList& event, list<EventList> eventList) {
    if (eventList.empty())
}

我不是很有经验,所以我知道我可能做错了,但它编译得很好。我的问题是:

void EventList::addEventToList(EventList& event, list<EventList> eventList) {
        if (eventList.empty())
    }

我不知道如何将这部分转换为c++:

private void addEventToList(Event event, List<Event> eventList) {
            if (eventList.isEmpty()) eventList.add(0, event);
            else if (eventList.get(0).at() < event.at()) eventList.add(event);
            else eventList.add(0, event);
        }

如果我编写类似event.insert(event, 0)的东西,那么它将不适合insert所采用的参数。

您只需使用list::push_back即可。

void EventList::addEventToList(EventList& event, list<EventList> eventList) {
    eventList.push_back(event);
}

但是,如果保持原样,调用函数将不会在列表中看到新项,因为您按值将eventList传递给了函数。您需要通过引用传递它。

void EventList::addEventToList(EventList& event, list<EventList>& eventList) {
    eventList.push_back(event);
}

list::push_back将项目添加到列表的末尾(后面(。如果您希望将项目添加到列表的开头(前面(,则可以使用list::push_front

void EventList::addEventToList(EventList& event, list<EventList>& eventList) {
    eventList.push_front(event);
}