DeleteWindow *new_win = new DeleteWindow();; new_win->getpath(thepath); QString thepath="/"; void DeleteWindow::getpath(QString inpath){path=inpath;} 现在path增多,需要用vector存放,给出修改代码
时间: 2024-01-22 15:02:29 浏览: 97
如果需要用 vector 存储多个路径,可以将 path 从 QString 类型改为 std::vector<std::string> 类型,并相应地修改 getpath() 函数和类的定义。具体实现如下:
```
#include <vector>
#include <string>
class DeleteWindow {
public:
void getpaths(std::vector<std::string> inpaths) { paths = inpaths; }
private:
std::vector<std::string> paths;
};
// 使用示例:
DeleteWindow* new_win = new DeleteWindow();
std::vector<std::string> thepaths = { "/", "/home", "/var" };
new_win->getpaths(thepaths);
```
这样就可以用 vector 存储多个路径了。
相关问题
Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path_to_start = astar.getPath(start_node, end_node); std::vector<Node*> path_to_end = astar.getPath(end_node, end_node1);,增加代碼,如果agv的current的x和y等於任務起點的x和y,則只將agv的起點和任務的終點放入path中
你可以在 if 语句中添加条件,判断 agv 的当前坐标是否与任务起点坐标相同,如果是则直接将 agv 的起点和任务的终点放入路径中。代码如下:
```cpp
Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY());
Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY());
Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY());
if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) {
std::vector<Node*> path;
path.push_back(start_node);
path.push_back(end_node1);
// do something with path
}
else {
std::vector<Node*> path_to_start = astar.getPath(start_node, end_node);
std::vector<Node*> path_to_end = astar.getPath(end_node, end_node1);
// do something with path_to_start and path_to_end
}
```
if (tasks[completed_task_index].Task_type == 1) { // 如果是充电任务 if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_ ) { // 如果到达充电站 if (agvs[i].battery_ < 100) { std::thread charge_thread([&]() { agv_charge(i); }); charge_thread.detach(); } } { // 更新路径 Node* start_node = new Node(agvs[i].current_x, agvs[i].current_y); Node* end_node = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path = astar.getPath(start_node, end_node); path.erase(path.begin()); paths[i] = path; } }翻譯一下
这段代码是一个条件语句。首先判断当前完成的任务类型是否为充电任务(Task_type == 1)。如果是充电任务并且AGV车辆已经到达了充电站(current_x == end_x_ && current_y == end_y_),那么判断车辆电量是否小于100。如果小于100,则创建一个新的线程(charge_thread),该线程执行充电任务(agv_charge(i)),并将该线程分离(detach),让其在后台自行运行。
如果当前完成的任务不是充电任务或者充电站还未到达,则更新AGV车辆的路径。首先创建起点(start_node)和终点(end_node)节点,然后使用A*算法(astar.getPath())计算出新的路径(path),并将路径的第一个节点(起点)删除。最后将更新后的路径存储到全局变量paths[i]中。
阅读全文
相关推荐








