我有一组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;
抱歉,有很多cout用于调试。 Temp是在控制台中首先打印出的元组(3个)的集合,r是第二个打印出来的元组(5个)。打印出来的4是参考集合中元组(向量)的大小而且是正确的。输出应打印&#39; 12345&#39;任何关于为什么打印内存位置的帮助都会受到赞赏。
答案 0 :(得分:1)
我猜想getTuples()
函数会返回一个按值设置的值。所以你的迭代器it
在这里指向一个临时对象的元素:
set<Tuple>::iterator it=temp.getTuples().begin();
取消引用it
是未定义的行为。您必须确保复制getTuples()
返回的内容,或修改它以返回引用。