有关vector的求助 不知道怎么回事就越界了
// 图遍历.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <string>
#define MAX_VERTEX_NUM 8
class CEdge
{
friend class CGraph;
private:
int ivex;
int jvex;
bool mark;
public:
//CEdge *info;
CEdge *ilink;
CEdge *jlink;
int GetIvex()const{return ivex;}
int GetJvex()const{return jvex;}
bool GetMark()const{return mark;}
void SetIvex(const int i){ivex=i;}
void SetJvex(const int j){jvex=j;}
void SetMark(const bool m){mark=m;}
CEdge():ivex(0),jvex(0),mark(0){}
CEdge (const CEdge&ce):ivex(ce.GetIvex()),jvex(ce.GetJvex()),mark(ce.GetMark()),ilink(ce.ilink),jlink(ce.jlink){}
CEdge (const int i, const int j,const bool m):ivex(i),jvex(j),mark(m){}
};
class CVertex
{
friend class CGraph;
private:
string data;
public:
CVertex *parent;
CVertex *children;
CEdge *firstedge;
string GetData()const{return data;}
void SetData(const string d){data=d;}
CVertex():data("0"){}
CVertex(const CVertex&v):data(v.GetData()),firstedge(v.firstedge){}
CVertex(const string d):data(d){}
};
typedef vector<CVertex>VecVertex;
typedef vector<CEdge>VecEdge;
class CGraph
{
public:
VecVertex vertexes;
VecEdge edges;
void addAnEdge(int i,int j);
void addAnVertex(string i);
void linkVertexToEdge(CVertex *v,CEdge *e);
void InitEdge(CEdge *e);
//void linkIlinkToEdge(CEdge *e1,CEdge *e2);
//void linkJlinkToEdge(CEdge *e1,CEdge *e2);
void linkAllEdge();
};
void CGraph::addAnVertex(string i)
{
CVertex *ver=new CVertex;
ver->SetData(i);
vertexes.push_back(*ver);
}
void CGraph::addAnEdge(int i,int j)
{
CEdge *ed=new CEdge;
ed->SetIvex(i);
ed->SetJvex(j);
ed->SetMark(0);
edges.push_back(*ed);
}
void CGraph::InitEdge(CEdge *e)
{
e->ilink=new CEdge;
e->ilink=NULL;
e->jlink=new CEdge;
e->jlink=NULL;
}
void CGraph::linkVertexToEdge(CVertex *v,CEdge *e)
{
v->firstedge=new CEdge;
v->firstedge=e;
}
/*void CGraph::linkIlinkToEdge(CEdge *e1,CEdge *e2)
{
//InitEdge(e1);
//InitEdge(e2);
e1->ilink=e2;
e2->ilink=NULL;
e2->jlink=NULL;
}
void CGraph::linkJlinkToEdge(CEdge *e1,CEdge *e2)
{
//InitEdge(e1);
//InitEdge(e2);
e1->jlink=e2;
e2->ilink=NULL;
e2->jlink=NULL;
}*/
void CGraph::linkAllEdge()
{
int iorj;
for(unsigned int i=0;i<edges.size();i++)
{
InitEdge(&edges[i]);
}//全部初始化
for(unsigned int i=0;i<vertexes.size();i++)
{
unsigned int j=0;
while(j<edges.size())
{
while(edges[j].GetIvex()!=i||edges[i].GetJvex()!=i)
j++;
if(edges[j].GetIvex()==i)
iorj=0;
else if(edges[j].GetJvex()==i)
iorj=1;
unsigned int k=j;
while((edges[k].GetIvex()!=i||edges[k].GetJvex()!=i)&&k<edges.size())
k++;
if((edges[k].GetIvex()==i||edges[k].GetJvex()==i)&&iorj==0)
{
*edges[j].ilink=edges[k];
j=k;
}
else if((edges[k].GetIvex()==i||edges[k].GetJvex()==i)&&iorj==1)
{
*edges[j].jlink=edges[k];
j=k;
}
}
}
}
void main()
{
CGraph g;
g.addAnVertex("A");
g.addAnVertex("B");
g.addAnVertex("C");
g.addAnVertex("D");
g.addAnEdge(0,1);
g.addAnEdge(0,2);
g.addAnEdge(1,3);
g.linkAllEdge();
system("pause");
}错误出现在
for(unsigned int i=0;i<edges.size();i++)
{
InitEdge(&edges[i]);
}//全部初始化
我这里的edges是个vector 它的size现在是3
我让i<edges.size()好把我这个edges中所有的元素按照
void CGraph::InitEdge(CEdge *e)
{
e->ilink=new CEdge;
e->ilink=NULL;
e->jlink=new CEdge;
e->jlink=NULL;
}
这个函数来进行初始化
可是不知道为什么怎么弄都越界
把全部初始化的函数写成
edges[0]->ilink=new CEdge; 也会越界
本人新手 希望赐教
...全文
相关推荐
详解C++中的vector容器及用迭代器访问vector的方法
vector的元素通过索引访问,索引从0开始。使用[]操作符可以访问和修改元素,但这种方式不安全,因为它不会检查索引是否越界。
C++中map和vector作形参时如何给定默认参数?
```在这里,我们定义了两个fun函数,第一个函数不带vector参数,第二个函数带vector参数。
C++ Vector用法详解
在性能敏感的场合,如果已知数据的上限,且数据量大而操作不频繁,使用静态数组或者预留足够空间的Vector会更合适,以避免频繁的内存重新分配。
C++中vector容器使用详细说明
- `at()`: 访问指定索引的元素,若越界则抛出异常。 - `back()`: 获取最后一个元素,不检查元素存在性。 - `begin()`: 返回指向第一个元素的迭代器。
Vector初始化的各种写法
**默认初始化**: 当创建一个新的Vector对象时,不指定任何初始容量或元素,系统会自动进行默认初始化。


