我不能在我的抽象数据类型中使用队列
I can't use Queue in my abstract data type
我正在研究图形,我创建了一个图形类,并将#include <queue>
添加到我的代码中。如果我把queue<int> MyQueue
写在主函数里,效果很好。但是如果我在我的类图形中编写相同的代码queue<int> MyQueue
,它会给我一个运行时错误。等待你的帮助。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class AdjListImp_Graph
{
public:
vector<int> *array[8];
vector<int> List[8];
AdjListImp_Graph(){
for(int i=1; i<8; i++)
array[i] = &List[i];
}
};
class AdjMatrixImp_Graph
{
public:
int AdjMatrix[7][7];
queue<int> MyList; // !Having problem with this code!
AdjMatrixImp_Graph(){
for(int i=0; i<8; i++)
for(int j=0; j<8; j++)
AdjMatrix[i][j] = 0;
}
};
int main (void)
{
AdjListImp_Graph MyGraph_3a, MyGraph_3b, MyGraph_3c;
MyGraph_3a.List[1].push_back(4);
MyGraph_3a.List[2].push_back(4);
MyGraph_3a.List[4].push_back(7);
MyGraph_3a.List[6].push_back(3);
MyGraph_3a.List[7].push_back(5);
MyGraph_3b.List[1].push_back(2);
MyGraph_3b.List[2].push_back(5); MyGraph_3b.List[2].push_back(7);
MyGraph_3b.List[4].push_back(3); MyGraph_3b.List[4].push_back(6);
MyGraph_3b.List[5].push_back(4);
MyGraph_3b.List[6].push_back(1); MyGraph_3b.List[6].push_back(7);
MyGraph_3c.List[2].push_back(1);
MyGraph_3c.List[3].push_back(4); MyGraph_3c.List[3].push_back(6);
MyGraph_3c.List[4].push_back(5);
MyGraph_3c.List[5].push_back(2);
MyGraph_3c.List[6].push_back(7);
MyGraph_3c.List[7].push_back(2);
/********************************************************************************************************/
AdjMatrixImp_Graph My_Graph_3a, My_Graph_3b, My_Graph_3c;
My_Graph_3a.AdjMatrix[1][4] = 1;
My_Graph_3a.AdjMatrix[2][4] = 1;
My_Graph_3a.AdjMatrix[3][2] = 1;
My_Graph_3a.AdjMatrix[4][7] = 1; // 4'ten 7'ye yol var.
My_Graph_3a.AdjMatrix[6][3] = 1;
My_Graph_3a.AdjMatrix[7][5] = 1;
My_Graph_3b.AdjMatrix[1][2] = 1;
My_Graph_3b.AdjMatrix[2][5] = 1; My_Graph_3b.AdjMatrix[2][7] = 1;
My_Graph_3b.AdjMatrix[4][3] = 1; My_Graph_3b.AdjMatrix[4][6] = 1;
My_Graph_3b.AdjMatrix[5][4] = 1;
My_Graph_3b.AdjMatrix[6][1] = 1; My_Graph_3b.AdjMatrix[6][7] = 1;
My_Graph_3c.AdjMatrix[2][1] = 1;
My_Graph_3c.AdjMatrix[3][4] = 1; My_Graph_3c.AdjMatrix[3][6] = 1;
My_Graph_3c.AdjMatrix[4][5] = 1;
My_Graph_3c.AdjMatrix[5][2] = 1;
My_Graph_3c.AdjMatrix[6][7] = 1;
My_Graph_3c.AdjMatrix[7][2] = 1;
system("pause");
return EXIT_SUCCESS;
}
更改声明
int AdjMatrix[7][7];
int AdjMatrix[8][8];
,它不会崩溃。当你在main
中有queue
时,它通过巧合工作。
顺便说一下,我强烈建议您改变数据结构的设计,不要使用指向容器的指针。
在AdjMatrixImp_Graph
的构造函数中初始化AdjMatrixImp_Graph::AdjMatrix
时,您超出了数组边界。它可能会写入AdjMatrixImp_Graph::MyList
的内存区域,并破坏其结构。
将循环设置为或者您可以使用for (int i;i<7;i++) for(int j;j<7;j++){...
memset(AdjMatrix, 0, sizeof(AdjMatrix));
检查main
代码,建议将AdjMatrix
的定义更改为AdjMatrix[8][8]
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++:自定义数据类型向量错误的队列
- 这种抽象模板矩阵类数据类型的方式好吗?
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 派生数据类型与抽象数据类型
- 具有数据类型的C 抽象基础将在派生类中定义
- 如何创建抽象数据类型的模板类?
- 使用纯抽象数据类型作为返回
- 抽象数据类型(ADT)和数据结构之间有什么区别
- 抽象数据类型命名约定:(动态)数组,向量,序列,列表,容器,缓冲区
- 内置于c++/python/java中的抽象数据类型
- 如何具有抽象数据类型的参数
- 在依赖类的构造函数中使用抽象类作为数据类型
- 创建具有多个数据类型的 C++ 队列
- 简单抽象数据类型链表
- 如何正确地将std::函数用于其他数据类型(在优先级队列中)
- 对抽象数据类型的stl::列表排序
- 我不能在我的抽象数据类型中使用队列
- 是int, char也是抽象数据类型