2つのベクトルの最初の「n」要素が等しいかどうかを確認するにはどうすればよいですか?
私は次を試しました:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
typedef vector<double> v_t;
int main(){
v_t v1,v2;
int n = 9;
for (int i = 1; i<10; i++){
v1.Push_back(i);
v2.Push_back(i);
}
v1.Push_back(11);
v2.Push_back(12);
if (v1.begin()+n == v2.begin()+n)
cout << "success" << endl;
else
cout << "failure" << endl;
}
なぜ「成功」ではなく「失敗」と表示されるのですか?
std::equal
ヘッダーから <algorithm>
関数を使用します。
if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
std::cout << "success" << std::endl;
両方のベクトルには、少なくともn
要素が必要であることに注意してください。どちらかが短すぎる場合、プログラムの動作は未定義になります。
entireベクトルが他のベクトルと等しいかどうかを確認する場合は、他のものと比較するように比較します。
if (v1 == v2)
あなたの(失敗した)コードは、1つのベクトルのiteratorとiterator他の。等しいベクトルの反復子は等しくありません。各反復子は、反復するシーケンスに関連付けられているため、あるベクトルの反復子が別のベクトルの反復子と等しくなることはありません。
2つを比較する最も簡単な(検索する非日常関数が最も少ないという点で)方法は、再度ループすることです。
bool are_equal = true;
for (int i = 0; i < first_how_many; i++)
if (v1[i] != v2[i])
{
are_equal = false;
break;
}
ほぼ同じことを行いますが、必要に応じて<algorithm>
ヘッダーのstd::equal
関数: http://www.cplusplus.com/reference/algorithm/equal/