矢量超出范围,将值分配给空矢量>不可能?

vector out of range, assigning values to an empty vector->not possible?

本文关键字:gt 不可能 范围 分配      更新时间:2023-10-16

我对 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(因为 atom->getID(( 返回 0(。但是,编译器告诉我:"在抛出'std::out_of_range'的实例后终止调用what((: vector::_M_range_check">

我不明白为什么我不能在这里分配一个值,是因为向量还没有包含任何元素吗?

我不明白为什么我不能在这里分配一个值,是因为向量还没有包含任何元素吗?

这正是你的问题。向量为空,尚不包含任何元素。因此,您不能为向量中的任何特定元素赋值。

你对std::vector的实际运作方式有误解。你不能使用 operator[]()at() 函数在那里创建任意位置,这些函数在调用这些函数时需要已经存在。