打印值向量f [0]

时间:2013-08-09 05:13:41

标签: c++

假设我有一个分数类,我确实希望将它们保存在向量中 我确实创建了一个分数向量

但是,我不知道如何读取矢量中的值,通过读取我的意思是打印出来的值

结果f[0]将打印出分数的地址而不是分数

的数据
void main()
{
    fraction fr(2,5);
    vector<fraction*> f;
    f.push_back(&fr);
    cout<<f[0]<<endl;
}

3 个答案:

答案 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(),因为如果你试图从“数组/向量”范围中解决索引,它会返回一个错误。

我希望能解决你的问题。如果没有,请在评论中再次询问;)