construct(_Up* __p, _Args&&... __args) { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
时间: 2024-01-24 10:20:11 浏览: 29
这是 C++ 中的一个构造函数,用于在指定的内存地址上构造一个对象。它接受两个参数:__p 表示要构造对象的内存地址,__args 是可变参数模板,表示传递给对象构造函数的参数。
其中,::new 表示在指定的内存地址上构造一个对象,而不是在堆或栈上分配内存。std::forward 是一个模板函数,用于将参数原封不动地转发到下一个函数中,以避免多余的拷贝或移动操作。
这个构造函数通常会在实现自定义容器或智能指针等需要手动管理内存的场景中使用。
相关问题
construct(_Up* __p, _Args&&... __args) { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }报错
这个错误可能是因为模板参数 `_Up` 没有提供正确的构造函数参数 `_Args`,或者是 `_Up` 类型本身没有正确的构造函数。请检查你的代码,确保构造函数参数和类型都正确。此外,如果你提供了自定义的构造函数,则需要确保它符合 C++ 的构造函数语法和语义。如果问题仍然存在,可以提供更多代码和上下文信息,以便更好地帮助你解决问题。
Function: Creat an undirected graph Args: *G: Pointer to a gragh *ver: An array of vertex value *edge: An array of edges Description: Construct a graph which is stored in the form of an adjacency list */ void creatGraph(Graph* G, VertexType ver[], VertexType edge[][2]) { }
好的,下面是 `creatGraph` 函数的代码实现:
```c++
void creatGraph(Graph* G, VertexType ver[], VertexType edge[][2]) {
int i, j, k;
ArcNode* p;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
G->adjList[i].firstArc = NULL;
}
G->numVertexes = sizeof(ver) / sizeof(VertexType);
G->numEdges = sizeof(edge) / sizeof(VertexType) / 2;
for (i = 0; i < G->numVertexes; i++) {
G->adjList[i].data = ver[i];
}
for (k = 0; k < G->numEdges; k++) {
i = LocateVertex(G, edge[k][0]);
j = LocateVertex(G, edge[k][1]);
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextArc = G->adjList[i].firstArc;
G->adjList[i].firstArc = p;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = i;
p->nextArc = G->adjList[j].firstArc;
G->adjList[j].firstArc = p;
}
}
```
其中,`LocateVertex` 函数用于查找顶点在邻接表中的位置,代码如下:
```c++
int LocateVertex(Graph* G, VertexType v) {
int i;
for (i = 0; i < G->numVertexes; i++) {
if (G->adjList[i].data == v) {
return i;
}
}
return -1;
}
```
需要注意的是,在这个函数中,我们假设邻接表中的顶点值不会重复。