¿Cómo obtengo un const_iterator
de un iterator
en C++? ¿Qué tal un const_iterator
de un insert_iterator
? El iterator
resultante debe apuntar en el mismo lugar que el original.C++ iterator to const_iterator
15
A
Respuesta
22
Los contenedores están obligados a proporcionar iterator
como un tipo convertible en const_iterator
, por lo que se puede convertir implícitamente:
Container::iterator it = /* blah */;
Container::const_iterator cit = it;
std::insert_iterator
s son iteradores de salida. Esto no permite convertirlos a un Container::iterator
normal que debe ser un iterador directo.
Otro tipo de inserto de inserción puede permitir tal cosa, pero los obtenidos a partir de las funciones estándar no lo hacen.
Creo que se puede escribir su propia envoltura alrededor std::insert_iterator
que expone el miembro protegido iter
, sin embargo:
template <typename Container>
class exposing_insert_iterator : public std::insert_iterator<Container> {
public:
exposing_insert_iterator(std::insert_iterator<Container> it)
: std::insert_iterator<Container>(it) {}
typename Container::iterator get_iterator() const {
return std::insert_iterator<Container>::iter;
}
};
// ...
std::insert_iterator<Container> ins_it;
exposing_insert_iterator<Container> exp_it = ins_it;
Container::iterator it = exp_it.get_iterator();
4
Puede convertirlos. Ejemplo:
std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;
Pero supongo que esa no es la respuesta que está buscando. Muéstrame el código. :-)
Cuestiones relacionadas
- 1. ¿Puede 'iterator' escribir solo la subclase 'const_iterator'?
- 2. ¿Las comparaciones entre iterator y const_iterator son ineficaces?
- 3. C++: ¿Cómo escribir un const_iterator?
- 4. Estándar de C++: const_iterator inesperado en multiset
- 5. C++ Template Iterator error
- 6. Obtención de const_iterator del iterador
- 7. ¿Existe una diferencia operativa entre std :: set :: iterator y std :: set :: const_iterator?
- 8. Iterator en lenguaje C
- 9. C++ Iterator Pipelining Designs
- 10. probando C++ iterator
- 11. Cómo eliminar la constness de const_iterator?
- 12. Diferente eficiencia de iterador y const_iterator (STL)
- 13. m.find (...) == m.end() - que se usa, iterador o const_iterator
- 14. boost transform iterator y C++ 11 lambda
- 15. ¿Cuál es la diferencia entre const_iterator y el iterador non-const en C++ STL?
- 16. ¿Cómo aplico el principio DRY a los iteradores en C++? (iterador, const_iterator, reverse_iterator, const_reverse_iterator)
- 17. iterator successor
- 18. map/set iterator no incrementablemap/set iterator no incrementable
- 19. List Iterator Remove()
- 20. cómo detectar si un tipo es un iterador o const_iterator
- 21. JavaScript Iterator Clase
- 22. XML to C struct y C struct to XML
- 23. C/C++ header to java
- 24. Obteniendo el valor de std :: list <> :: iterator to pointer?
- 25. C# int to byte []
- 26. php to C# converter
- 27. C# GZipStream to String
- 28. NSArray to C array
- 29. C++ character to int
- 30. C++ float to int
¿La fundición no funciona? – Pubby
@ Pubby8: ¡Ni siquiera necesitas un yeso! –
Huh, debo haber cometido un error. Pensé que recibí un error de compilación cuando traté de convertirlos implícitamente. –