2016-06-01 12 views
1

私はC++に堪能ではありません。私はベクトルを扱うPHPに変換しようとしている非常に短いC++スクリプトを持っています。ベクター操作

オンラインドキュメントから、ベクターは、PHPの配列に似ていますが、機能が少ないもののリストであることがわかりました。しかし、私はベクトル操作に関する良い文書を見つけるのに苦労しています。このスニペットで

例えば

real32 test(std::vector<T>::iterator First, std::vector<T>::iterator Last) 
{ 
    if(Last - First > 0) { 
     // do stuff 
    } 
} 

私はLast - Firstを行うには成果の数を推測するハザードことができます。

  • iteratorから推測各ベクトル内の単一の要素間の差(
  • 各ベクトル間の要素の和の差
  • 各ベクトル間の要素数の差 - これはあるかもしれません //do stuff partでのforループ)

私はRTFMしようとしていますが、私は全体つまずいているのオンラインresourcessomeはmaybものの(特に洞察に満ちたとして遭遇していませんe正しい質問を探す/検索できません)

この場合実際にはLast - Firstとは何ですか?

+1

2つのイテレータが2つの異なるベクトルに属することに注意してください。 – Ajay

+0

@Ajayもしそうなら、その関数は未定義の振る舞いをします。 – Galik

+0

@Galik、Trueしかし、そのような関数は実行時エラーを引き起こすために拘束されます。別のイテレータを 'vector'に渡してみてください。(少なくともVC++では)よく扱います。 – Ajay

答えて

6

機能はvector内の特定の場所を指している、2 vector秒かかりますが、2 iteratorsしません。この場合、最初と最後の1つ前の要素。これは通常のC++イディオムです。 (イテレータは実際には既存のvectorの一部を示すかもしれないが、実際にはすべてである必要はないことに注意してください)。

したがって、違いはvectorの要素の合計数です。通常、各要素を処理するループを持ち、に達するまでFirstをインクリメントします。

1|2|3|4|5| 
^First ^Last 

Last5を指していないことに注意してください、それ過去1。 Lastvectorの有効な要素ではありませんが、ループを停止する時期を示すセンチネルです。

この場合はとなりますので、Firstを5回増やしてLastにする必要があります。

通常、リファレンスドキュメントは、その言語を学ぶのに最適な場所ではありません。私たちはbook listを持っています。

あなたのリンク:

  • isocpp.org:標準化プロセスと委員会、ここではあまり実際の言語の文書について。

  • cplusplus.com:非公式のリファレンスドキュメントサイト。過去には、エラーを修正することはあまり良くありませんでした。非常に多くの人が好む:

  • cppreference.com:リファレンスドキュメントのコミュニティ管理のwiki。

標準以外の「公式」リファレンスドキュメント、isocpp.orgで見つかったが、実際、それを読むことをしようとしない、それは専門家だけで、目的とすることのできるのドラフトはありませんコンパイラの実装者に。私はそれにリンクするつもりはない。

正直言って、私は本当に良い初心者のチュートリアルをオンラインで見つけるのに苦労しています。

+1

厳密に言えば、これらの2つのイテレータがベクトルの最初と最後の要素を指していることはわかりません。ベクトルの始めと終わりの部分。それらの違いは、その2つのポイントの間にある要素の数です。 – Galik