표준 맵의 범위 기반 반복
C 11 이상에서는 범위 기반 for() 루프가 반복을 위한 편리한 구문을 제공합니다. 컨테이너를 통해. 그러나 지도와 같은 복잡한 데이터 구조에서의 동작은 혼란스러울 수 있습니다.
다음 예를 고려하세요.
<code class="cpp">std::map<foo, bar> testing = /*...initialized...*/; for (auto abc : testing) { std::cout << abc << std::endl; }
이 루프에서 abc 유형은 무엇입니까? foo 키, bar 값 또는 반복자를 생성합니까?
해결 방법
C 11 및 C 14에서 범위 기반 루프는 맵의 키를 반복합니다. -값 쌍. 따라서 abc의 유형은 std::pair 키와 값을 별도로 검색하려면 쌍의 첫 번째와 두 번째 멤버를 사용할 수 있습니다. 루프의 변수는 일반적으로 맵의 내용을 수정하지 않음을 나타 내기 위해 const로 선언됩니다. C 17 및 Beyond In C 17에서는 맵의 범위 기반 반복을 위해 편리한 약칭 표기법이 도입되었습니다. 이 구문은 첫 번째와 두 번째 멤버를 키와 값으로 직접 대체합니다. 이를 통해 키-값 쌍에 대한 반복을 더욱 명확하고 간결하게 표현할 수 있습니다. 추가 고려 사항 위 내용은 범위 기반 반복은 C의 표준 맵에서 어떻게 작동하며 버전에 따라 구문이 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!<code class="cpp">for (auto abc : testing) {
std::cout << abc.first << " has value " << abc.second << std::endl;
}</code>
<code class="cpp">for (const auto& [key, value] : testing) {
std::cout << key << " has value " << value << std::endl;
}</code>
<code class="cpp">for (auto& kv : testing) {
std::cout << kv.first << " had value " << kv.second << std::endl;
kv.second = "modified"; // Modifies the map's value
}</code>