最近、私は今インデックスによるベクトルイテレータへのアクセス?
auto toDelete = std::make_shared<std::string>("FooBar");
std::vector<decltype(toDelete)> myVec{toDelete};
auto iter = std::find_if(std::begin(myVec), std::end(myVec),
[](const decltype(toDelete) _next)
{
return *_next == "FooBar";
});
if (iter != std::end(myVec))
{
std::shared_ptr<std::string> deletedString = iter[0];
std::cout << *deletedString;
myVec.erase(iter);
}
(もちろん、ここのために簡素化された)私のコードベースでは、このコードに出くわした、私はここで、我々はインデックスでイテレータにアクセスしていることに気づきました!ので、すべての私が推測することができ、私は誰もが前にインデックスでイテレータにアクセス見たことがない
std::shared_ptr<std::string> deletedString = iter[0];
は、イテレータはポインタのように扱われます、そして、我々は最初の要素は、ポインタで指さのアクセスという点です。そのコードは実際には次のコードと同等です:
std::shared_ptr<std::string> deletedString = *iter;
またはそれは未定義の動作ですか? RandomAccessIteratorためcppreference documentationから
'x [y]'は(この場合) '*(x + y)'とまったく同じです。イテレータにゼロを追加しても、イテレータは変更されません。だから 'iter [0]'は '* iter'と同じです。 –