C/Visual C - COPIAS

 
Vista:

COPIAS

Publicado por Ana (2 intervenciones) el 24/03/2006 18:17:23
Dada una a llamada a f(names), donde names contiene n vectores con m
nombres cada uno.
vector<string> concatenar(vector<vector<string> > names) {
vector<string> v;

for (vector::iterator i=names.begin();names!=names.end();
i++) {
vector<string> vIn=(*i);
for (vector::iterator j=vIn.begin();j!=vIn.end();
j++) {
v.push_back(*j);
}
}
return v;
}

Mis consultas son las siguientes:
1º) Si mal no entiendo el iterator está apuntando a la matriz no?
2º) De las 3 opciones de abajo, la correcta sería la primera?
-se crean (n * m) objetos adicionales de tipo string.
-En caso de ser names una referencia, se crearían 2 * (n * m) objetos
adicionales de tipo string.
-Si tanto names como vIn fueran referencias, se crearían (n * m)
objetos adicionales de tipo string.

Muchas Gracias

Ana
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:COPIAS

Publicado por fernando.gomez (1603 intervenciones) el 24/03/2006 23:57:20
Hola,

1. No necesariamente. Eso depende muchísimo de la implementación, el estándar no te asegura cómo. Lo único que te asegura es que cada elemento del std::vector se guarda en memoria contigua.

Así, al dereferenciar el iterador, apuntas a std::vector::begin() del vector embebido, pero no necesariamente a una matriz.

2. Según yo, la opción 3 es la correcta, toda vez que si vector<string> tiene n elementos y vector< vector<string> > tiene m, tendrías m*n objetos string. PERO como no los pasas por referencia, cuando mandes llamar a la función, se duplicarán. Así, si éstos se pasaran como referencias, sí tendrías m*n objetos.

Como nota adicional:

for (vector::iterator i=names.begin();names!=names.end(); i++)

cuando recorras un iterador, se recomienda emplear el pre incremento/decremento en lugar del post incremento/decremento. Esto hace que la iteración sea más rápida y ocupe menos memoria (porque el postincremento hace que se guarde una copia de *i para después simplemente devolverla). Es decir, es recomendable:

for (vector::iterator i=names.begin();names!=names.end(); ++i)

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COPIAS

Publicado por Ana (2 intervenciones) el 25/03/2006 01:06:57
MUCHAS GRACIAS!
Abusando de la buena voluntad hago otra consulta:

Qué temas de C/C++ evaluan las empresas para un trabajo (de programador)?

Muchas gracias nuevamente

Saludos,
Ana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COPIAS

Publicado por fernando.gomez (1603 intervenciones) el 25/03/2006 02:16:33
Uy, pregunta muuuuy difícil. Depende de qué tipo de aplicaciones se vayan a desarrollar, el conocimiento técnico del entrevistador, el puesto (si es para corrección de bugs, diseño y arquitectura, desarrollo de aplicación, etc) y un largo etcétera.

Usualmente hay este patrón:
1. Preguntas directas relacionadas con el lenguaje. Esta categoría está relacionada con conocimiento sobre cómo hacer cosas en C/C++, así como conocimiento de las librerías estándares.
Ej. ¿Qué es un iterador?

2. Preguntas sobre el lenguaje que demuestren un conocimiento complejo del lenguaje de programación. La finalidad de hacer estas preguntas es para saber qué tan bien enterado está el aspirante sobre el lenguaje. Algunas empresas emplean este tipo de preguntas para eliminar prospectos.

Ej 1. ¿Qué hace el siguiente código?
int i = 5/0;

Ej 2. ¿De qué forma se evalúan las siguientes expresiones?

Suponiendo las siguientes clases:
class CClase1
{
public: int foo() { return 5; }
};

class CClase2
{
public: CClase1 getClase1();
};

class CClase3
{
public: CClase2 getClase2(int j);
public: CClase1 getClase1();
};

¿Qué hace el siguiente código, qué valor se le asigna ?
CClase3 obj;
int i = obj.getClase2(obj.getClase1().foo()).getClase1().foo();

Ej 3. ¿Qué es un punto de secuencia?

3. Preguntas relacionadas con el modelado de aplicaciones. Usualmente, preguntas para probar la capacidad de análisis y creación del aspirante.

Ej 1. Modela una máquina de estados que haga xxx o zzz.

Ej 2. Modela una clase que represente a un humano y sus características.

Ej 3. Diagrama un caso de uso para la actividad xxx.

4. Preguntas de diseño. Usualmente preguntas relacionadas con patrones de diseño.

Ej 1. ¿Qué es una clase singleton?

Ej 2. Modela una fábrica de clases (class factory) para xxx.

5. Preguntas relacionadas con las buenas prácticas de programación.

6. Si el puesto requiere alguna tecnología en particular, seguro te encontrarás preguntas relacionadas (i.e. API de Windows, MFC, WinInet, ISAPI, etc).

En lo personal, siempre que entrevisto a alguien, me enfoco en los puntos 2, 4 y 6.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COPIAS

Publicado por fernando.gomez (1603 intervenciones) el 25/03/2006 02:19:35
Por cierto, ¿puedes responder a las preguntas 1 y 2 del punto 2? Es interesante luego darte cuenta de algo que creías como obvio está mal; a mí me pasó una vez... desde entonces comprendí el valor de esas preguntas...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar