Articles of stl

std :: string :: c_str () y temporales

Es el siguiente código de C ++ bien formado: void consumer(char const* p) { std::printf(“%s”, p); } std::string random_string_generator() { // returns a random std::string object } consumer(random_string_generator().c_str()); El problema que tengo es que, después de crear el objeto std :: string temporal y tomar el puntero c_str (), nada impide que se destruya el […]

Reordena el vector usando un vector de índices

Me gustaría reordenar los elementos en un vector, usando otro vector para especificar el orden: char A[] = { ‘a’, ‘b’, ‘c’ }; size_t ORDER[] = { 1, 0, 2 }; vector vA(A, A + sizeof(A) / sizeof(*A)); vector vOrder(ORDER, ORDER + sizeof(ORDER) / sizeof(*ORDER)); reorder_naive(vA, vOrder); // A is now { ‘b’, ‘a’, ‘c’ […]

¿Cómo se implementa C ++ std :: vector?

He estado usando std::vector mucho, y recientemente me hice esta pregunta: “¿Cómo se implementa std::vector ?” Tenía dos alternativas: 1) Lista enlazada, y luego hacer que la API parezca tener acceso aleatorio (es decir, operator[] sobrecarga operator[] ). 2) Usar new , por ejemplo, Foo* temp = new Foo[20] : creo que hacen algo como […]

¿Por qué los contenedores STL no tienen destructores virtuales?

¿Alguien sabe por qué los contenedores STL no tienen destructores virtuales? Por lo que puedo decir, los únicos beneficios son: reduce el tamaño de una instancia en un puntero (a la tabla de métodos virtuales) y hace que la destrucción y la construcción sean un poco más rápidas. El inconveniente es que no es seguro […]

Distinta de mayúsculas / minúsculas std :: string.find ()

Estoy usando el método find() std::string para probar si una cadena es una subcadena de otra. Ahora necesito una versión insensible a las mayúsculas y minúsculas de la misma cosa. Para la comparación de cadenas siempre puedo activar stricmp() pero no parece haber stristr() . He encontrado varias respuestas y la mayoría sugiere usar Boost […]

¿Es hash_map parte del STL?

Pregunta rápida … ¿Es hash_map parte de la STL?

Cómo eliminar todas las apariciones de un char en cadena de C ++

Estoy usando lo siguiente: replace (str1.begin(), str1.end(), ‘a’ , ”) Pero esto está dando error de comstackción.

Limpiar una lista STL / vector de punteros

¿Cuál es el trozo más corto de C ++ que se te puede ocurrir para limpiar de forma segura un vector o una lista de punteros? (suponiendo que tiene que llamar eliminar en los punteros?) list foo_list; Prefiero no usar Boost o ajustar mis punteros con punteros inteligentes.

¿Por qué no puedo escribir en un literal de cadena mientras * puedo * escribir en un objeto de cadena?

Si defino algo como a continuación, char *s1 = “Hello”; por qué no puedo hacer algo como a continuación, *s1 = ‘w’; // gives segmentation fault …why??? ¿Qué sucede si hago algo como a continuación? string s1 = “hello”; ¿Puedo hacer algo como a continuación? *s1 = ‘w’;

comparar iteradores de diferentes contenedores

¿Es legal comparar iteradores de diferentes contenedores? std::vector foo; std::vector bar; ¿La expresión foo.begin() == bar.begin() produce un comportamiento falso o indefinido? (Escribo un iterador personalizado y tropecé con esta pregunta al implementar operator== ).