>백엔드 개발 >C++ >범위 기반 반복은 C의 표준 맵에서 어떻게 작동하며 버전에 따라 구문이 어떻게 다릅니까?

범위 기반 반복은 C의 표준 맵에서 어떻게 작동하며 버전에 따라 구문이 어떻게 다릅니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 02:49:281076검색

How does range-based iteration work with standard maps in C   and how does the syntax differ across versions?

표준 맵의 범위 기반 반복

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입니다. 즉, 각 요소는 개별 키나 값이 아닌 키-값 쌍을 나타냅니다.

키와 값을 별도로 검색하려면 쌍의 첫 번째와 두 번째 멤버를 사용할 수 있습니다.

<code class="cpp">for (auto abc : testing) {
  std::cout << abc.first << " has value " << abc.second << std::endl;
}</code>

루프의 변수는 일반적으로 맵의 내용을 수정하지 않음을 나타 내기 위해 const로 선언됩니다.

C 17 및 Beyond

In C 17에서는 맵의 범위 기반 반복을 위해 편리한 약칭 표기법이 도입되었습니다.

<code class="cpp">for (const auto& [key, value] : testing) {
  std::cout << key << " has value " << value << std::endl;
}</code>

이 구문은 첫 번째와 두 번째 멤버를 키와 값으로 직접 대체합니다. 이를 통해 키-값 쌍에 대한 반복을 더욱 명확하고 간결하게 표현할 수 있습니다.

추가 고려 사항

  • 루프 내에서 맵의 콘텐츠를 수정할 수 있습니다. auto&로 선언된 참조 변수 사용:
<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>
  • 맵의 값이 큰 경우 쌍 객체 대신 반복자가 있는 범위 기반 루프를 사용하는 것이 더 효율적일 수 있습니다. 그러나 이는 범위 기반 for 루프가 제공하는 편의성 중 일부를 제거합니다.

위 내용은 범위 기반 반복은 C의 표준 맵에서 어떻게 작동하며 버전에 따라 구문이 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.