0

C++ のベクトル [] 演算子について質問があります。

vector<stack<T>> myStackVec;
ops...
...
...

このコードは変更しませんmyStackVec:

stack<T> temp = myStackVec.at(stackPos);
cout << "removing " << temp.top() << endl;

このコードは、次のように変更myStackVecして変更しtempます。

stack<T> *temp = &myStackVec[stackPos];
temp->push(item);

[] 演算子は参照を返しますが、コード スニペット 1 が機能しないのはなぜですか? tempcode1 はコピーですか?

4

3 に答える 3

3
stack<T> temp = myStackVec.at(stackPos);

スタックのコピーを作成し、コピーtemp.push_backされたスタックで動作します。代わりに参照が必要です:

stack<T> &temp = myStackVec.at(stackPos);
temp.push_back(item);

または単に:

myStackVec.at(stackPos).push_back(item);
于 2013-01-24T23:08:40.073 に答える
2

tempcode1 はコピーですか?

はい。

動作するように参考にしてください。

stack<T> &temp = myStackVec.at(stackPos);
cout << "removing " << temp.top() << endl;
于 2013-01-24T23:05:50.943 に答える
2

タイプとは何かを考えてみてくださいstack<T> temp。ヒント: 参考にはなりません

于 2013-01-24T23:06:02.390 に答える