假设我有一个分数类,我确实希望将它们保存在向量中 我确实创建了一个分数向量
但是,我不知道如何读取矢量中的值,通过读取我的意思是打印出来的值
结果f[0]
将打印出分数的地址而不是分数
void main()
{
fraction fr(2,5);
vector<fraction*> f;
f.push_back(&fr);
cout<<f[0]<<endl;
}
答案 0 :(得分:0)
您正在向量中存储指向fraction
的指针:vector<fraction*>
。
cout << f[0]->numerator << "/" << f[0]->denominator << endl;
答案 1 :(得分:0)
要打印数据,请使用cout<<*(f[0])<<endl;
代替cout<<f[0]<<endl;
原因:由于您只在f中存储了分数类型的指针,因此f [0]会为您提供一个指针以获取值,只需使用*运算符取消引用它。
答案 2 :(得分:0)
目前,您正在生成一个由分数类型的地址组成的向量
如果你真的想存储指针对象,获取存储在f [0]的值的最简单方法是* f [0],因为f [0]是一个指针,指向你的分数类对象
编辑:(因为你的评论问题) 我想向您解释一下您的计划:
void main()
{
fraction fr(2,5);
vector<fraction*> f; // define a vector-object storing fraction-class pointers
f.push_back(&fr); // adding the address of fr
cout<<f[0]<<endl; // printing out the address of fr which was previously stored
}
如果多次重启此程序,可能会给您不同的输出。您将始终获取存储fr的地址,但是如果重新启动程序,该地址可能会有所不同(因为您的计算机上的其他程序同时需要内存空间等)。
如果您编写的程序如下:
void main()
{
fraction fr(2,5);
vector<fraction*> f;
f.push_back(&fr);
for(int i=0;i<10;i++) cout<<f[0]<<endl;
}
这个程序将给你10倍相同的输出,总是fr的地址,并且总是相同的,因为分配fr的内存空间对于整个程序流保持不变。 (如果你重新执行它,它可能会给你10次不同的地址,但所有10个都是相同的)
如果您想获得fr的值,您至少有两种可能的选择:
void main()
{
fraction fr(2,5);
vector<fraction> f; // no "*" so there is no pointer allocated
f.push_back(fr); // no "&" so there is just the object fr stored, not its address
cout<<f[0]<<endl;
}
第二个选项:
void main()
{
fraction fr(2,5);
vector<fraction*> f; // pointer allocated
f.push_back(&fr); // address of fr stored
cout<<*f[0]<<endl; // the object at the address f[0] is printed out because of "*"
}
我还建议你使用向量的Memberfunction f.at(),因为如果你试图从“数组/向量”范围中解决索引,它会返回一个错误。
我希望能解决你的问题。如果没有,请在评论中再次询问;)