gpt4 book ai didi

c++ - vector 超出范围,将值分配给空 vector ->不可能?

转载 作者:行者123 更新时间:2023-11-28 05:08:54 28 4
gpt4 key购买 nike

我是 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 类型的新对象(不知道这里的对象是否是正确的词),我试图访问它的一个 vector 并为 vector 中的某个位置分配一个值。我尝试赋值的第一个位置是位置 0(因为 atom->getID() 返回 0)。但是,编译器告诉我:“在抛出‘std::out_of_range’的实例后调用终止what(): vector::_M_range_check"

我不明白为什么我不能在这里赋值,是因为 vector 还没有包含任何元素吗?

最佳答案

I don't see why I can't assign a value here, is it because the vector does not contain any elements yet?

这正是你的问题。 vector 是空的,还不包含任何元素。因此,您不能为 vector 中的任何特定元素分配值。

你有一个误解 std::vector确实有效。您不能使用 operator[]()at() 函数在那里创建任意位置,这些函数需要在调用这些函数时已经存在。

关于c++ - vector 超出范围,将值分配给空 vector ->不可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com