¿Por qué este bucle, usado para agregar caracteres adyacentes en un vector, produce una salida extraña?

Tómese un minuto para rastrear el código y piense qué valores están tomando i1 e i2.

Primero tenemos i1 = 0 e i2 = 1, así que vemos titular [0] + titular [1] = 1 + 2 = 3
Ahora i2 se convierte en 3, por lo que i2 <= holder.size () – 1 sigue siendo cierto. Continuamos en el bucle for interno con i1 = 0 e i2 = 3.

Esto nos da el titular [0] + titular [3] = 1 + 4 = 5.

En este punto, agregamos 2 a i2 nuevamente (por lo que se convierte en 5) y la condición del bucle ya no se mantiene, por lo que salimos del bucle interno y regresamos al bucle externo.

Ahora i1 se convierte en 2 y comenzamos el ciclo interno nuevamente. Los valores de i2 serán los mismos que antes (1 y luego 3) ya que es exactamente el mismo bucle.

Esto nos da
titular [2] + titular [1] = 3 + 2 = 5
y luego titular [2] + titular [3] = 3 + 4 = 7

Finalmente, cuando salimos del bucle interno por segunda vez e i1 toma el valor 4, lo que hace que salgamos del bucle externo.

Para resolver el problema original (agregando elementos adyacentes), no veo por qué querría usar 2 bucles. Lógicamente, la idea de agregar elementos adyacentes solo implica un paso sobre los datos.

¡Espero que ayude!

Samuel Maskell ha explicado el problema con precisión. Solo estoy agregando una solución de muestra

int len ​​= holder.size ();
para (int i = 0; i <(len / 2); ++ i)
cout << (titular [2 * i] + titular [2 * i + 1]) << "";
if (len% 2! = 0)
cout << titular [len - 1];

Ahora las otras respuestas aquí abordan con precisión el problema. Has complicado demasiado tu programa con tus dos bucles, lo que ha creado una salida no deseada debido a algunos problemas de anidamiento.

Antes de escribir un programa, con frecuencia dibujaré un diagrama lógico para tener una idea de cómo fluirá el programa. Alternativamente, me preguntaré qué estoy tratando de hacer que el programa haga y aborde las múltiples formas en que esto se puede hacer. Entrar en algunos hábitos para ayudar a visualizar el camino lógico que toma el programa puede ayudarlo a llegar a la raíz de sus problemas con bastante facilidad.

Tiene un bucle anidado, que es un bucle dentro de otro bucle. Para cada paso del bucle externo, el bucle interno ejecutará holder.size () – 1. Considere

para (int i = 1; i <= 5; ++ i) {
para (j = 1; j <= 5; ++ j) {
cout << i << ',' << j << endl;
}
}
Esto imprimirá, 1,1 1,2 1,3 1,4 1,5 2,1 2,2 2,3 2,4 2,5 etc.

En su caso, no necesita un bucle anidado, sí lo hará un solo bucle. Utilizar

para (decltype (holder.size ()) i1 = 0; i1 <= holder.size () - 2; i1 + = 2) {
holder.size ()) i2 = i1 + 1;

}

More Interesting

Se nos dan probabilidades [matemáticas] P (A) = P (B) = P (C) \ geq 2/3 [/ matemáticas] y sabemos que [matemáticas] P (A \ cap B \ cap C) = 0 [/ mates]. ¿Qué podemos decir sobre [matemáticas] P (A) [/ matemáticas]?

¿Cuál es el mejor libro para explorar la profundidad del problema P versus NP?

¿Cuál es la función más compleja que has visto que, lógicamente, no debería funcionar, pero sí lo hace?

¿Cómo encontramos la longitud total del camino de un proyectil?

¿Cuál es el problema P vs. NP y por qué es tan importante?

¿Cuál es una forma simple o intuitiva de entender por qué todos los números aleatorios son normales (Teorema de Borel)?

¿Qué hace que la oración 'Lucas no pueda afirmar esta oración constantemente', vulnerable o incluso incompleta?

¿Cuál es la relación del valor ap y la medida estadística de prueba?

¿Por qué razón se prefieren los operadores de asignación compuesta aritmética al escribir códigos profesionalmente en Java?

Cómo calcular el número de subsecuencias distintas de una palabra dada de una longitud dada

¿Puede este bucle resolver la pregunta de suma infinita?

¿Cómo amplío la importancia de la informática teórica a alguien que ha trabajado en la industria del software toda su vida?

¿Qué campos crees que están más relacionadas con Matemáticas e Informática o Matemáticas y Física?

¿Los problemas de optimización en el aprendizaje profundo son típicamente convexos o no convexos?

¿La investigación colaborativa dificulta el uso de mejores herramientas (por ejemplo, TeXmacs en lugar de TeX / LaTeX)?