我对c ++很新,我的程序遇到了一些麻烦。该程序的总体目标是在图中找到循环边(在这种情况下是一个分子,表示为图形)。我在头文件中定义了以下结构:
typedef struct{
std::vector<unsigned int> discovery;
std::vector<unsigned int> lowpoints;
std::vector<short int> cyclic;
}Cyclic;
在我的cpp文件中,我有这个功能:
Cyclic Naomini::dfs_cyclic_and_acyclic_atoms(MoleculePtr mol){
Cyclic inf_vecs;
bool flag=false;
AtomPtr parent;
for(AtomPtr atom: mol->getAtoms()){
std::cout<<"hello"; // gets printed out
if(!atomIsHydrogen(atom)){
std::cout<<atom->getID(); // prints out 0
inf_vecs.discovery.at(atom->getID())=0; // the problem is here
std::cout<<"hello2"; // does not get printed out
.
.
.
所以我声明了一个类型为Cyclic的新对象(不知道对象是否是正确的词),我试图访问其中一个向量并将值赋给向量中的某个位置。我试图赋值的第一个位置是位置0(as atom-&gt; getID()返回0)。但是,编译器告诉我:“抛出'std :: out_of_range'实例后调用终止 what():vector :: _ M_range_check“
我不明白为什么我不能在这里指定一个值,是因为向量不包含任何元素吗?
答案 0 :(得分:1)
我不知道为什么我不能在这里指定一个值,是因为矢量不包含任何元素吗?
这正是你的问题。向量是空的,并且还没有包含任何元素。因此,您无法使用值为矢量中的任何特定元素指定。
你误解std::vector
实际上是如何运作的。您无法使用operator[]()
或at()
函数在那里创建任意位置,这些函数在调用这些函数时必须存在。