내 코드가 아니지만 here에서. read_data() 함수에는 이전에 보지 못했던 무언가가있는 scanf가 있습니다. 그것은 무엇을합니까? 그것은 STL입니까?scanf 명령문 이후의 쉼표?
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
내 코드가 아니지만 here에서. read_data() 함수에는 이전에 보지 못했던 무언가가있는 scanf가 있습니다. 그것은 무엇을합니까? 그것은 STL입니까?scanf 명령문 이후의 쉼표?
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
쉼표 연산자를 사용합니다. 매우 드물게 사용되는 쉼표 연산자는 일련의 표현식을 하나의 표현식으로 함께 나열합니다. 이 경우,
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
는 의미 성명에서 "를 scanf
을 다음 deg[b]++
의 결과를 평가, deg[b]++
를 호출 한 후, G[a]
에 pb(b)
전화
를 내가이 상황에서 사용되는 것을 참조하십시오.
를 솔직히for(i = 1; i <= M; i++)
scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
이 나에게 가난한 스타일 파업이 작성하는 더 나은 다음과 같습니다.
,536을for(i = 1; i <= M; i++) {
scanf("%d %d\n", &a, &b);
G[a].pb(b);
deg[b]++;
}
위의 코드는 기능면에서 동등하고 훨씬 더 읽기 쉽습니다. 스택 오버플로에 게시하거나 C++ 언어의 이상한 세부 사항을 알아야 의미를 알 수 있습니다. :-)
그것은 하나의 문장으로 만들어 단지 여러 표현의 comma operator. 를 사용하여 (이것은 코드를 난독으로 하지 내 의견으로는 좋은 생각 임) for
루프 주위에 괄호을 방지하는 데 도움이됩니다.
그것은 동일한 기능입니다 :
for(i = 1; i <= M; i++) {
scanf("%d %d\n", &a, &b);
G[a].push_back(b); /* after macro expansion */
deg[b]++;
}
혼란의 원인은 무엇입니까? [쉼표 연산자] (https://en.wikipedia.org/wiki/Comma_operator)? –