使用矢量
Working with Vectors
我是一名学生,还没有教矢量,但我现在需要使用它们。我要做一个结构体向量。结构体是汇编代码的标签。每次要添加标签时,我都会调整向量的大小,但是,当我试图从标签中检索信息时,它们都是相同的。不幸的是,我实际上不能分享我的代码,但我将展示我认为帮助我解决这个问题所必需的行。那么,我做错了什么?如果您需要查看更多代码,请告诉我。
宣布在全球范围内:
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;
};
相关文章:
- 没有找到相关文章