1
vector<int> v(1, 1);
it = v.begin();

*it++最初の要素に 1 を加えなかったのはなぜですか?

使えるのに*it = *it + 1

C++何年も使ってない

4

3 に答える 3

4

++ は * よりも優先されます。

したがって、最初の反復子は次の要素を指すように作成され、次に * を使用して逆参照されます。左側で 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;
}
于 2012-09-28T04:53:29.523 に答える
0

他の人が説明しているように

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++() が完了する前にイテレータの値を返すことがわかります。

于 2014-01-02T16:08:19.197 に答える
0

は、バインドがより緊密であるため、結果 ( の元の値)*it++をポストインクリメントして逆参照することを意味します( と同等です)。の内容は変更しません。インクリメントしたい場合は、 を使用します。itit++*(it++)*it*it(*it)++

于 2012-09-28T04:39:18.053 に答える