以下是将顶点添加到图表的代码:
void myGraph::addVertex(const string &newVertex)
{
if (getIndex(newVertex) != -1)
{
std::cout << ("addVertex: ");
std::cout << newVertex;
std::cout << (" failed -- vertex already exists.") << std::endl;
return;
}
// if array of vertices is full, we need to expand it and
// also expand Edges
if (sizeof(Vertices)/sizeof(Vertices[0])==numVertices)
{
Vertices = resize(Vertices, 2*numVertices + 1);
Edges = resize(Edges, 2*numVertices + 1);
}
Vertices[numVertices++] = newVertex;
}
以下是调整Vertices数组大小的代码:
string *myGraph::resize(string array1[], int newSize)
{
// make array of size equal to new size
string *temp = new string [newSize];
int smallerSize = newSize;
// if the size of input array is less than the new size then smaller size will be that of input array
if (sizeof(array1)/sizeof(array1[0]) < smallerSize)
{
smallerSize = sizeof(array1) / sizeof(array1[0]);
}
// loop till smaller size and copy the content of input array to newly created array
for (int i = 0; i < smallerSize; i++)
{
temp[i] = array1[i];
}
return temp;
}
当我调试这段代码时,它只添加了1个顶点,即numVertices = 1,并且在下一步中它在顶点[numVertices ++]中说明
答案 0 :(得分:2)
sizeof
给出了指向数组中数据的指针的大小,而不是数组的总大小。这取决于您的平台,但sizeof(string*)/sizeof(string)
(相当于您的大小计算)总是会返回1.您可能应该使用类似std::vector
或std::list
的内容这个,正确的选择取决于你将如何使用它。这些标准容器类将处理为您分配内存和调整大小,因此您不必担心它。
答案 1 :(得分:1)
您可以通过传递旧数组大小来修复它:
string *myGraph::resize(string array1[], int array1Size, int newSize)
然后:
if (array1Size < smallerSize) {
smallerSize = array1Size ;
}
正如Katie所解释的那样,代码中的sizeof(array1)
不是实际数组的大小,您应该使用string* array1
来表明它是指向堆上已分配内存的指针