私にはlist<Thing*> clothes
があります。私は希望の形式にthings
をプリントアウトしたい:ループ内のリストの最後の要素
+- shirt
+- pants
\\ shoes
だから、基本的に出力が最後の反復が、すべて同じです。これまでのところ、私はこれをしようとしました:
string CCloset::OutputContent() const {
string output;
for(auto i : this->clothes) {
if(next(i) == this->clothes.end()) {
output.append("\\");
} else {
output.append("+-");
}
output.append(i->Output());
}
return output;
}
理論は、次の反復の原因はlist.end()
であることをi
イテレータならば、それは我々が少し出力を変更するので、私たちは最後の要素にいる意味です。コンパイラはCan't compare structures
と言っています。
next()
は、次の要素を指すイテレータを返します。最後の要素の場合、それはリストの終わりを指し示すでしょう。 list.end()
は、リストの終わりを指すイテレータを返します。
私には何が欠けていますか?
'i'はイテレータではなく、' Thing * 'だけです。 –
'std :: vector'のように思われます。それはまた、より速くなる可能性があります。 –
@Torbjörnありがとうございますので、私は古典的な 'for(begin、end、incr)'を使用しなければなりません。 –