2012-03-06 6 views
0

ベクトルの最後の要素を取得して文字列に割り当てたいが、問題があるようだ。ベクトルの終わりを取得して文字列に割り当てる方法

このベクターはすでに埋め込まれているとしますが、どれくらいの量があるのか​​分かりません。

std::vector<std::string> vec; 
std::string s = vec.end(); 

ループを実行してから最後のインデックスを取得しますか?

これは機能しませんでしたので、ベクターの終わりを得る方法はありますか?

EDIT ------

out.push_back(r.validateR(str)); 
appendCustomizedOutput = out.back(); 
DCS_LOG_DEBUG("END " << appendCustomizedOutput); 
split(test,appendCustomizedOutput,boost::is_any_of("\n")); 
DCS_LOG_DEBUG("END " << test[0]); 

私がテストを印刷しようとすると[0]何も印刷されていないと私はなぜ知らないのですか?

+0

私たちは本当にお手伝いすることはできません。あなたが分割している文字列に何が含まれているのか分かりません。これはベクトル(またはその動作)とは関係ありません。 .. – Nim

答えて

9

vector::end()は、ベクトルの最後の実際の要素を超える反復子を返します(反復処理中にチェックするために主に使用されます)。

最良の方法は、次のようになります。

std::string s = vec.back(); // last item 

@JamesKanzeと@PeterWoodが言うように、空のベクターをチェックすることを忘れないでください - そうでなければ、未定義の動作です...

+1

それは空ではない 'if(!vec.empty())'をチェックすることに言及するのが良いかもしれません、そうでなければ未定義の動作が起こります。 –

+0

@ PeterWood、答えを更新します... – Nim

+0

@PeterWoodあなたが見てみることができたら私は質問を編集しました。 – CodersSC

1

container.end()(または任意の種類コンテナの最後までイテレータを返します。コンテナ内の最後の項目を取得するには、あなたの代わりにcontainer.back()をしたい:

vec.back()は何のためにあるのかだ
std::string s = vec.back(); 
6

。最初にベクトルが空でないことを確認してください。

1

end()は、ベクトルコンテナのpast-the-end要素を参照するイテレータを返します。 back()が必要です:ベクトルコンテナの最後の要素への参照を返します。

2

vec.back()を使用して、最後の要素への参照を取得します。最後の要素を(返さずに)削除するには、vec.pop_back()を使用します。

関連する問題