0

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

全球宣布:

vector<Label> labeldir;

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

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

注意:它在while循环中运行,每次找到标签时都会增加labelnum。

访问每个标签名称的示例:

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
4

3 回答 3

2

很难确切地看到你做错了什么,但让我猜一下:

您加载向量的代码应该如下所示:

#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;
}
于 2013-04-22T04:18:08.753 回答
2

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

当您尝试打印内容时,它们都指向同一个缓冲区,因此每个标签都显示最近读入该缓冲区的名称。

治愈:使用std::string代替char *.

于 2013-04-22T04:18:40.270 回答
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;

并且当您悲伤时,Label 的结构类型为

struct Label
{
     std::string name;
};
于 2013-04-22T04:44:57.900 回答