矢量超出范围,将值分配给空矢量>不可能?
vector out of range, assigning values to an empty vector->not possible?
我对 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()
函数在那里创建任意位置,这些函数在调用这些函数时需要已经存在。
相关文章:
- C# HashSet VS C++ std::unordered_set 使用自定义类键。C++慢...不可能。如何实现 C# 的速度?
- 为什么在C++不可能递增或进行数学运算,例如在声明为数组的变量上乘法
- fopen 与常量字符 * 从 QString 是不可能的
- 矢量返回常量引用,不可能向下转换
- 分配取消引用的字符指针真的不可能吗?
- C#类过程 - 控制C 应用程序,不可能读取输出
- 可能是不可能的模板参数规范/推论
- 易失性结构 = 结构不可能,为什么?
- 矢量超出范围,将值分配给空矢量>不可能?
- 为什么不可能实例化原子对
- 一个倒梯形,但如果输入高度对于宽度来说太大,那么它应该报告,不可能("不可能的形状"是什么)
- W10上不可能使用十字架编译的libpng16-16.dll执行
- 如果明确给出多维数组,为什么不可能char [] [] [] = {..},{..}}
- 为什么我的自定义界面总是返回不可能的0x80040213/VFW_E_NO_CLOCK
- 从张量的读取设备不可能的方法
- 多态性抽象语法树(递归下降解析器):不可能
- IDXGISwapChain::CheckInterfaceSupport 返回一个不可能的结果
- C++为什么不可能将这两个操作合并在一行中?
- 指针将指针的指针等同于指针指向指针.不可能
- 是std :: set&lt; std :: future&gt;不可能存在