C++ 迭代器返回大小>;0但赢得';t输出元件

C++ 迭代器返回大小>;0但赢得';t输出元件,c++,memory,iterator,C++,Memory,Iterator,我有一组类型元组。元组包含字符串向量。当我输出用于调试的大小时,它输出的大小是4,这是正确的,但是当我尝试输出第一个元素时,我得到了疯狂的东西(内存)。为什么它不返回字符串 cout<<"temp size:"<<temp.getTuples().size()<<" r size:"<<r.getTuples().size()<<endl; set<Tuple>::iterator it=temp.getTu

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

    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;

cout我猜
getTuples()
函数返回一个set by值。因此,您的迭代器
将在此处指向临时对象的元素:

set<Tuple>::iterator it=temp.getTuples().begin();
set::iterator it=temp.getTuples().begin();
取消引用
是未定义的行为。您必须确保创建由
getTuples()
返回的内容的副本,或者对其进行修改以返回引用