<iterator> 演算子
operator!=
演算子の左側の反復子オブジェクトが右側の反復子オブジェクトと等しくないかどうかを調べます。
template <class RandomIterator>
bool operator!=(const reverse_iterator<RandomIterator>& left, const reverse_iterator<RandomIterator>& right);
template <class Type, class CharType, class Traits, class Distance>
bool operator!=(const istream_iterator<Type, CharType, Traits, Distance>& left, const istream_iterator<Type, CharType, Traits, Distance>& right);
template <class CharType, class Tr>
bool operator!=(const istreambuf_iterator<CharType, Traits>& left, const istreambuf_iterator<CharType, Traits>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
反復子オブジェクトが等しくない場合は true、反復子オブジェクトが等しい場合は false。
注釈
コンテナー内の同じ要素に対応する場合は、1 つの反復子オブジェクトが別の反復子オブジェクトと等しくなります。 2 つの反復子がコンテナー内の異なる要素を指す場合、これらの反復子は等しくありません。
例
// iterator_op_ne.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 9 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the last element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to the first "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 != rVPOS2 )
cout << "The iterators are not equal." << endl;
else
cout << "The iterators are equal." << endl;
rVPOS1++;
cout << "The iterator rVPOS1 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 != rVPOS2 )
cout << "The iterators are not equal." << endl;
else
cout << "The iterators are equal." << endl;
}
The vector vec is: ( 1 2 3 4 5 6 7 8 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 8.
The iterators are equal.
The iterator rVPOS1 now points to the second element
in the reversed sequence: 7.
The iterators are not equal.
operator==
演算子の左側の反復子オブジェクトが右側の反復子オブジェクトと等しいかどうかを調べます。
template <class RandomIterator1, class RandomIterator2>
bool operator==(
const move_iterator<RandomIterator1>& left,
const move_iterator<RandomIterator2>& right);
template <class RandomIterator1, class RandomIterator2>
bool operator==(
const reverse_iterator<RandomIterator1>& left,
const reverse_iterator<RandomIterator2>& right);
template <class Type, class CharType, class Traits, class Distance>
bool operator==(
const istream_iterator<Type, CharType, Traits, Distance>& left,
const istream_iterator<Type, CharType, Traits, Distance>& right);
template <class CharType, class Tr>
bool operator==(
const istreambuf_iterator<CharType, Traits>& left,
const istreambuf_iterator<CharType, Traits>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
反復子オブジェクトが等しい場合は true、反復子オブジェクトが等しくない場合は false。
注釈
コンテナー内の同じ要素に対応する場合は、1 つの反復子オブジェクトが別の反復子オブジェクトと等しくなります。 2 つの反復子がコンテナー内の異なる要素を指す場合、これらの反復子は等しくありません。
最初の 2 つのテンプレート演算子は、left と right の両方に同じ反復子が格納されている場合にのみ true を返します。 3 番目のテンプレート演算子は、left と right の両方に同じストリーム ポインターが格納されている場合にのみ true を返します。 4 番目のテンプレート演算子は left.equal (right) を返します。
例
// iterator_op_eq.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the last element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to the first "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 == rVPOS2 )
cout << "The iterators are equal." << endl;
else
cout << "The iterators are not equal." << endl;
rVPOS1++;
cout << "The iterator rVPOS1 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 == rVPOS2 )
cout << "The iterators are equal." << endl;
else
cout << "The iterators are not equal." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
The iterators are equal.
The iterator rVPOS1 now points to the second element
in the reversed sequence: 8.
The iterators are not equal.
operator<
演算子の左側の反復子オブジェクトが右側の反復子オブジェクトより小さいかどうかを調べます。
template <class RandomIterator>
bool operator<(const reverse_iterator<RandomIterator>& left, const reverse_iterator<RandomIterator>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
式の左側の反復子が右側の反復子より小さい場合は true、右側の反復子以上の場合は false。
注釈
1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素よりも前にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト未満となります。 1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素と同じ要素またはその要素よりも後にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト以上となります。
例
// iterator_op_lt.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 0 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the last element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( );
cout << "The iterators rVPOS1& rVPOS2 initially point to the "
<< "first element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 < rVPOS2 )
cout << "The iterator rVPOS1 is less than"
<< " the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is not less than"
<< " the iterator rVPOS2." << endl;
rVPOS2++;
cout << "The iterator rVPOS2 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS2 << "." << endl;
if ( rVPOS1 < rVPOS2 )
cout << "The iterator rVPOS1 is less than"
<< " the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is not less than"
<< " the iterator rVPOS2." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterators rVPOS1& rVPOS2 initially point to the first element
in the reversed sequence: 10.
The iterator rVPOS1 is not less than the iterator rVPOS2.
The iterator rVPOS2 now points to the second element
in the reversed sequence: 8.
The iterator rVPOS1 is less than the iterator rVPOS2.
operator<=
演算子の左側の反復子オブジェクトが右側の反復子オブジェクト以下かどうかを調べます。
template <class RandomIterator>
bool operator<=(const reverse_iterator<RandomIterator>& left, const reverse_iterator<RandomIterator>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
式の左側の反復子が右側の反復子以下の場合は true、右側の反復子より大きい場合は false。
注釈
1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素と同じ要素またはその要素よりも前にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト以下となります。 1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素よりも後にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクトより大きくなります。
例
// iterator_op_le.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 0 ; i < 6 ; ++i ) {
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ) + 1,
rVPOS2 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to the "
<< "second element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
cout << "The iterator rVPOS2 initially points to the "
<< "first element\n in the reversed sequence: "
<< *rVPOS2 << "." << endl;
if ( rVPOS1 <= rVPOS2 )
cout << "The iterator rVPOS1 is less than or "
<< "equal to the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is greater than "
<< "the iterator rVPOS2." << endl;
rVPOS2++;
cout << "The iterator rVPOS2 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS2 << "." << endl;
if ( rVPOS1 <= rVPOS2 )
cout << "The iterator rVPOS1 is less than or "
<< "equal to the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is greater than "
<< "the iterator rVPOS2." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterator rVPOS1 initially points to the second element
in the reversed sequence: 8.
The iterator rVPOS2 initially points to the first element
in the reversed sequence: 10.
The iterator rVPOS1 is greater than the iterator rVPOS2.
The iterator rVPOS2 now points to the second element
in the reversed sequence: 8.
The iterator rVPOS1 is less than or equal to the iterator rVPOS2.
operator>
演算子の左側の反復子オブジェクトが右側の反復子オブジェクトより大きいかどうかを調べます。
template <class RandomIterator>
bool operator>(const reverse_iterator<RandomIterator>& left, const reverse_iterator<RandomIterator>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
式の左側の反復子が右側の反復子より大きい場合は true、右側の反復子以下の場合は false。
注釈
1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素よりも後にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクトより大きくなります。 1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素と同じ要素またはその要素よりも前にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト以下となります。
例
// iterator_op_gt.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 0 ; i < 6 ; ++i ) {
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( );
cout << "The iterators rVPOS1 & rVPOS2 initially point to "
<< "the first element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 > rVPOS2 )
cout << "The iterator rVPOS1 is greater than "
<< "the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is less than or "
<< "equal to the iterator rVPOS2." << endl;
rVPOS1++;
cout << "The iterator rVPOS1 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 > rVPOS2 )
cout << "The iterator rVPOS1 is greater than "
<< "the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is less than or "
<< "equal to the iterator rVPOS2." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterators rVPOS1 & rVPOS2 initially point to the first element
in the reversed sequence: 10.
The iterator rVPOS1 is less than or equal to the iterator rVPOS2.
The iterator rVPOS1 now points to the second element
in the reversed sequence: 8.
The iterator rVPOS1 is greater than the iterator rVPOS2.
operator>=
演算子の左側の反復子オブジェクトが右側の反復子オブジェクト以上かどうかを調べます。
template <class RandomIterator>
bool operator>=(const reverse_iterator<RandomIterator>& left, const reverse_iterator<RandomIterator>& right);
パラメーター
left
iterator 型のオブジェクト。
right
iterator 型のオブジェクト。
戻り値
式の左側の反復子が右側の反復子以上の場合は true、右側の反復子より小さい場合は false。
注釈
1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素と同じ要素またはその要素よりも後にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト以上となります。 1 つの反復子オブジェクトが、別の反復子オブジェクトが対応する要素よりも前にコンテナーで発生する要素に対応する場合、その反復子オブジェクトは別の反復子オブジェクト未満となります。
例
// iterator_op_ge.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 0 ; i < 6 ; ++i ) {
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( ) + 1;
cout << "The iterator rVPOS1 initially points to the "
<< "first element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
cout << "The iterator rVPOS2 initially points to the "
<< "second element\n in the reversed sequence: "
<< *rVPOS2 << "." << endl;
if ( rVPOS1 >= rVPOS2 )
cout << "The iterator rVPOS1 is greater than or "
<< "equal to the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is less than "
<< "the iterator rVPOS2." << endl;
rVPOS1++;
cout << "The iterator rVPOS1 now points to the second "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
if ( rVPOS1 >= rVPOS2 )
cout << "The iterator rVPOS1 is greater than or "
<< "equal to the iterator rVPOS2." << endl;
else
cout << "The iterator rVPOS1 is less than "
<< "the iterator rVPOS2." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
The iterator rVPOS2 initially points to the second element
in the reversed sequence: 8.
The iterator rVPOS1 is less than the iterator rVPOS2.
The iterator rVPOS1 now points to the second element
in the reversed sequence: 8.
The iterator rVPOS1 is greater than or equal to the iterator rVPOS2.
operator+
反復子にオフセットを追加し、新しいオフセット位置に挿入された要素をアドレス指定する move_iterator または reverse_iterator アドレスを返します。
template <class RandomIterator, class Diff>
move_iterator<RandomIterator>
operator+(
Diff _Off,
const move_iterator<RandomIterator>& right);
template <class RandomIterator>
reverse_iterator<RandomIterator>
operator+(
Diff _Off,
const reverse_iterator<RandomIterator>& right);
パラメーター
_Off
const move_iterator または const reverse_iterator がオフセットされる位置の数。
right
オフセットされる反復子。
戻り値
right + _Off の合計を返します。
例
// iterator_op_insert.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 0 ; i < 6 ; ++i ) {
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to "
<< "the first element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
vector<int>::difference_type diff = 4;
rVPOS1 = diff +rVPOS1;
cout << "The iterator rVPOS1 now points to the fifth "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
The iterator rVPOS1 now points to the fifth element
in the reversed sequence: 2.
operator-
ある反復子を別の反復子から減算し、その差異を返します。
template <class RandomIterator1, class RandomIterator2>
Tdiff operator-(
const move_iterator<RandomIterator1>& left,
const move_iterator<RandomIterator2>& right);
template <class RandomIterator1, class RandomIterator2>
Tdiff operator-(
const reverse_iterator<RandomIterator1>& left,
const reverse_iterator<RandomIterator2>& right);
パラメーター
left
反復子。
right
反復子。
戻り値
2 つの反復子の相違点。.
注釈
1 つ目のテンプレート演算子は left.base() - right.base() を返します。
2 つ目のテンプレート演算子は right.current - left.current を返します。
Tdiff は、返される式の種類によって決まります。 それ以外の場合は、RandomIterator1::difference_type となります。
例
// iterator_op_sub.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 0 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The initial vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( ),
rVPOS2 = vec.rbegin ( );
cout << "The iterators rVPOS1 & rVPOS2 initially point to "
<< "the first element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
for (i = 1; i < 5; ++i)
{
rVPOS2++;
}
cout << "The iterator rVPOS2 now points to the fifth "
<< "element\n in the reversed sequence: "
<< *rVPOS2 << "." << endl;
vector<int>::difference_type diff = rVPOS2 - rVPOS1;
cout << "The difference: rVPOS2 - rVPOS1= "
<< diff << "." << endl;
}
The initial vector vec is: ( 0 2 4 6 8 10 ).
The iterators rVPOS1 & rVPOS2 initially point to the first element
in the reversed sequence: 10.
The iterator rVPOS2 now points to the fifth element
in the reversed sequence: 2.
The difference: rVPOS2 - rVPOS1= 4.