使用矢量

Working with Vectors

本文关键字:      更新时间:2023-10-16

我是一名学生,还没有教矢量,但我现在需要使用它们。我要做一个结构体向量。结构体是汇编代码的标签。每次要添加标签时,我都会调整向量的大小,但是,当我试图从标签中检索信息时,它们都是相同的。不幸的是,我实际上不能分享我的代码,但我将展示我认为帮助我解决这个问题所必需的行。那么,我做错了什么?如果您需要查看更多代码,请告诉我。

宣布在全球范围内:

vector<Label> labeldir;

调整矢量大小并添加信息,label是汇编代码文件中的标签名称:

labeldir.resize(labelnum + 1);
labeldir[labelnum].name = label;

注意:它是在while循环中运行的,每次找到一个标签,labelnum就增加一次。

访问每个Label名称的示例:

for (int i = 0; i < labeldir.size(); i++){
    cout << "Label entry " << i << " name : " << labeldir[i].name << endl;
}

对应的输出,注意问题(上面的代码是在一个while循环中,这是它的3次迭代):

Label entry 0 name : start
Label entry 0 name : done
Label entry 1 name : done
Label entry 0 name : five
Label entry 1 name : five
Label entry 2 name : five

汇编代码中的前3个标签,在第一个和第二个标签之间会有行,但它们将是常规指令:

start   add 1   2   1   decrement reg1
done    halt                end of program
five    .fill   5

我几乎可以打赌你的Label结构的name成员是char *。这意味着不是为每个标签创建单独的字符串,而是创建单独的指针——但是它们都指向同一个位置。

当你试图打印出你的内容时,它们都指向同一个缓冲区,所以每个Label都显示最近读到该缓冲区的名称。

Cure:用std::string代替char *

很难看出你到底做错了什么,但让我猜猜看:

加载vector的代码应该是这样的:

#include <string>
struct Label
{
    Label(const std::string& N) : Name(N)
    {}
    Label()
    {}
    std::string Name;
};
int main()
{
    std::vector<Label> labeldir;
    labeldir.push_back(Label("one"));
    labeldir.push_back(Label("two"));
    labeldir.push_back(Label("three"));
    labeldir.push_back(Label("four"));
    int i = 0;
    for(auto l : labeldir)
    {
        std::cout << "Label entry " << i++ << " name : " << l.Name << "n";
    }
    system("PAUSE");
    return 0;
}

根据您提供的信息,我假设您在向向量labeldir添加标签名称时遇到问题。

当你发现一个标签时,你可以用以下方式添加:

vector<Label> laberdir;
//As you fill the struct label with the name
Label label1;
label1.name = "start";
labeldir.pushback(label1);
labelNum = labelNum + 1;

和标签的结构类型为

struct Label
{
     std::string name;
};
相关文章:
  • 没有找到相关文章