迭代器返回大小> 0但不会输出元素

时间:2014-03-28 22:22:22

标签: c++ memory iterator

我有一组Tuple类型。元组包含一个字符串向量。当我输出调试大小时,输出大小为4,这是正确的,但是当我尝试cout第一个元素时,我得到了疯狂的东西(内存)。为什么不返回字符串?

    cout<<"temp size:"<<temp.getTuples().size()<<" r size:"<<r.getTuples().size()<<endl;
    set<Tuple>::iterator it=temp.getTuples().begin();
    t=*it;
    cout<<t.getTuple().size()<<" "<<t.getTuple()[0]<<endl;
    for(set<Tuple>::iterator it=temp.getTuples().begin();it!=temp.getTuples().end();++it)
    {
        for(set<Tuple>::iterator jt=r.getTuples().begin();jt!=r.getTuples().end();++jt)
        {
            t=*it;
            a=t.getTuple();
            e=*jt;
            b=e.getTuple();
            vector<string> ab;
            cout<<"a size:"<<t.getTuple().size()<<" b size:"<<e.getTuple().size()<<endl;
            cout<<"a size:"<<a.size()<<" b size:"<<b.size()<<endl;

Code and output

抱歉,有很多cout用于调试。 Temp是在控制台中首先打印出的元组(3个)的集合,r是第二个打印出来的元组(5个)。打印出来的4是参考集合中元组(向量)的大小而且是正确的。输出应打印&#39; 12345&#39;任何关于为什么打印内存位置的帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我猜想getTuples()函数会返回一个按值设置的值。所以你的迭代器it在这里指向一个临时对象的元素:

set<Tuple>::iterator it=temp.getTuples().begin();

取消引用it是未定义的行为。您必须确保复制getTuples()返回的内容,或修改它以返回引用。