如何获得指向qsort第一个参数的向量中第一项的指针?

Ric*_*ard -2 c++ pointers

我知道要获取指向向量的第一个元素的指针,您可以执行以下操作:

&myvector[0];
//or
&myvector.front();
Run Code Online (Sandbox Code Playgroud)

我想使用上面的指针将其插入为的第一个参数qsort。问题是,当我这样做时:

qsort(graph->&edge[0], ..., ..., myComparatorFunction);
Run Code Online (Sandbox Code Playgroud)

我得到这个错误expected unqualified-id before '&' token。该graph指低于自制类的实例:

class Graph {
public:
    int V, E;
    vector<Edge> edge;
};
Run Code Online (Sandbox Code Playgroud)

实例使用以下方法创建:

Graph* createGraph(vector<Edge> edge) {
    Graph* graph = new Graph;
    graph->edge = edge;
    return graph;
}
Run Code Online (Sandbox Code Playgroud)

在实现我想要的东西的同时如何摆脱错误?

Lig*_*ica 5

您的语法错误。

像这样编写表达式:

  • 向量是graph->edge
  • 它的第一个元素是graph->edge[0]
  • 该地址是&graph->edge[0]

(这也可以graph->edge.data()使用vector自己的界面更直接地拼写。)

graph->&edge[0]只是没有意义。


我也建议您要这样做std::sortqsort除非您知道出于某种原因需要后者。它是类型安全的,并且可能需要更多的“东西”(例如,捕获lambda和其他内联函子)。

并且,它将尝试成为最好的排序。同样的道理qsort(尽管有名字,表明它总是使用quicksort),但是std::sort最坏情况下的算法复杂度要比qsort允许的好。