Con l'avvento di C++ 11, abbiamo unordered_map.cbegin/cend per restituire specificamente i valori di const_iterator. quindi il tipo di "esso" dedotto nell'espressione "auto it = unordered_map.cbegin()" è const_iterator.Tipo ridotto di "auto it = unordered_map.find (chiave)"?
Tuttavia, quando si tratta della funzione unordered_map.find (chiave), penso che possa mancare una controparte "cfind()", che restituisce un const_iterator in modo specifico.
Alcuni dicono che possiamo usare "const auto it = unordered_map.find (chiave)" per ottenere un "const iterator", ma ho il forte sospetto che "const iterator" sia lo stesso "const_iterator", dove " const iterator "limita la possibilità di modificare l'iteratore stesso, mentre" const_iterator "limita la possibilità di modificare il contenuto a cui si riferisce l'iteratore.
Quindi, in realtà, se vogliamo approfittare di tipo detrazione "auto" completamente (con la conoscenza delle confusioni o le variazioni di "auto" tipo deduzione - Auto, Auto &, auto const &, etc.) , come posso avere unordered_map.find (chiave) per restituire un "const_iterator" senza che io debba specificare esplicitamente "const_iterator" - dopo tutto è il caso d'uso migliore per l'auto!
Di seguito è riportato un codice semplice esempio che illustra il comportamento del compilatore:
#include "stdafx.h"
#include <unordered_map>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::unordered_map<int, int> umiit;
umiit umii;
auto it0 = umii.find(0);
it0->second = 42;
const auto it1 = umii.find(0);
it1->second = 42;
umiit::const_iterator it2 = umii.find(0);
it2->second = 42; // expected compiler error: assigning to const
return 0;
}
Qual è la domanda? –
La domanda è nel quarto paragrafo: ** come posso avere unordered_map.find (chiave) per restituire un "const_iterator" senza che io debba specificare esplicitamente "const_iterator"?** – dfan