pat-1124

Se encontró un problema importante. Si usa una variable temporal para ingresar repetidamente y luego crear un par clave-valor, solo puede usar cin >> en lugar de scanf 

#include<iostream>
#include<map>
using namespace std;
map<string,int> pos;
int main(){
	int m,n,s;
	
	scanf("%d %d %d",&m,&n,&s);
	for(int i=1;i<=m;i++){
		string temp;//每一次都要重新声明,重新声明时,一般变量名不变,地址也不变; 
	
		cin>>temp;// 所以最好使用cin这就是一个值传递,会copy一个新地址,实现除去地址的值传递
	 
		int flag=0;
		if(s>m){if(i==1) printf("Keep going...\n");
		}
		else if(i==s){//更新s
		if(pos[temp]==0){//本质是地址建立键值对 
			pos[temp]=1;
			printf("%s\n",temp.c_str());
			flag=1;
			s=s+n;
		}
		if(flag==1) continue;
		if(i==s)s=s+1;
		}
	}
	return 0;
} 

para resumir

Esencialmente la diferencia entre citar y direccionar

Se puede entender que cin no necesita la dirección de temp. Le dará a temp un alias y asignará una nueva memoria, de modo que cada par clave-valor corresponda al nuevo valor. El par clave-valor es esencialmente la correspondencia entre la dirección y dirección., La clave es que a la dirección de la clave se le debe asignar una nueva, y el valor se redistribuirá, por lo que siempre que la clave corresponda a la nueva dirección, no puede ser incorrecta

Y scanf, cambia directamente la dirección original, la dirección siempre es una, lo que da como resultado que la dirección clave en el par clave-valor no haya cambiado, pero los datos entrantes hayan estado cambiando y el valor de la etiqueta sea siempre el mismo, lo que provocó un error

Entonces, si puede usar cin, especialmente la asignación repetida de variables temporales, use cin 

Simplemente comprenda que cin puede realmente darse cuenta de la relación valor-valor sin involucrar el problema de la superposición de direcciones

Inglés 

problema

Preste atención a los detalles de estos compiladores

 

Supongo que te gusta

Origin blog.csdn.net/m0_45359314/article/details/113076899
Recomendado
Clasificación