vector<int> v(1, 1);
it = v.begin();
*it++
最初の要素に 1 を加えなかったのはなぜですか?
使えるのに*it = *it + 1
C++
何年も使ってない
++ は * よりも優先されます。
したがって、最初の反復子は次の要素を指すように作成され、次に * を使用して逆参照されます。左側で v[1] を収集できます。
問題を解決するには、以下のコードを使用してください。
#include<iostream>
using namespace std;
int main()
{
vector<int> v(2, 1);
vector<int>::iterator it;
it = v.begin();
(*it)++; //instead of *it++;
cout << v[0] << v[1] << endl;
}
他の人が説明しているように
int x = *it++;
と同等です
int x = (*it)++;
これはと同等です
int x = *it;
it = ++it; // prefix
セミコロンの後までインクリメントされません (後置演算子であるため)。posfix ++ 演算子は通常、このような前置演算子を使用して実装されます
template<typename T> vector<T>::iterator vector<typename T>::iterator::operator++(int)
{
vector<T>::iterator tmp(*this);
++(*this); // call prefix operator++()
return tmp;
}
operator++() が完了する前にイテレータの値を返すことがわかります。
は、バインドがより緊密であるため、結果 ( の元の値)*it++
をポストインクリメントして逆参照することを意味します( と同等です)。の内容は変更しません。インクリメントしたい場合は、 を使用します。it
it
++
*(it++)
*it
*it
(*it)++