向量超出范围,将值赋给空向量 - >不可能吗?

时间:2017-05-13 21:32:16

标签: c++

我对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“

我不明白为什么我不能在这里指定一个值,是因为向量不包含任何元素吗?

1 个答案:

答案 0 :(得分:1)

  

我不知道为什么我不能在这里指定一个值,是因为矢量不包含任何元素吗?

这正是你的问题。向量是空的,并且还没有包含任何元素。因此,您无法使用值为矢量中的任何特定元素指定。

你误解std::vector实际上是如何运作的。您无法使用operator[]()at()函数在那里创建任意位置,这些函数在调用这些函数时必须存在。