[C++] range based for(범위기반 for 반복문)

2022. 6. 23. 22:53· Skils/C++
목차
  1. 📕범위기반 반복문
  2. Map
  3. 👀이유 
  4. 1. 범위기반 for문에서는 index 정보가 존재하지 않는다.
  5. 2. 범위기반 for 배열의 요소를 변경할 수없다.
오늘 알아볼 내용은 범위 기반 반복문이다.

📕범위기반 반복문

기존의 for문과 달리 시작과 끝점을 명시해주지 않아도, 알아서 처음부터 끝까지 순회를 하는 반복문이다.

형식은 아래와 같다.

for(데이터타입 elem : 데이터리스트)
{
~~~~~~~
}

여기서 주의할점은

데이터 타입과 데이터 리스트의 데이터 타입이 같아야 한다는 점이다.

헷갈린다면 auto를 넣어도 될 것 같다.(정확한 건 아님)

데이터 리스트의 변수들이 elem에 그대로 복사된다.

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
int main()
{
vector<int>num;
for(int i=1; i<=10;i++)
{
num.push_back(i);
}
for(int i=0; i<10;i++)
{
cout<<num[i]<<" ";
}
}
// 1 2 3 4 5 6 7 8 9 10

이러한 방식이 기존에 내가 짜던 방식이다. 

 

하지만 auto를 사용해서 반복문을 짠다면 훨씬 깔끔하고 편리한 것을 알 수 있다.

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
int main()
{
vector<int>num;
for(int i=1; i<=10;i++)
{
num.push_back(i);
}
for(auto n: num)
{
cout<<n<<" ";
}
}
// 1 2 3 4 5 6 7 8 9 10

 

Map

#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int,int>map;
map[1]=1;
map[2]=3;
map[3]=4;
map[4]=5;
map[5]=6;
for(auto m:map)
{
cout<<m.first<<" "<<m.second<<endl;
}
}
/*
1 1
2 3
3 4
4 5
5 6
*/

 

✔여기서 주의해야 할 점은 범위 기반 반복문은 for 반복문을 완전히 대체하지 못한다는 점이다.

 

👀이유 

1. 범위기반 for문에서는 index 정보가 존재하지 않는다.

index를 나타내는 아무런 정보가 없기 때문입니다.

기존의 for문에서는 index를 나타내는 i가 있지만 범위기반 for문에서는 오직 elem이라는 값만 존재한다.

따라서 index를 구분지어서 넣어줄 경우에는 코드가 더러워진다

2. 범위기반 for 배열의 요소를 변경할 수없다.

반복문이 돌 때마다 배열 리스트의 값을 elem에 복사한다.

따라서 배열의 배열리스트의 값을 바꾸려고 시도를 해도 복사된 값이기 때문에 바뀌지 않는다.

 

 

저작자표시 (새창열림)

'Skils > C++' 카테고리의 다른 글

ios_base::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)을 붙여야 하는 이유  (0) 2022.08.16
[C++] 공백을 포함한 문자열 처리[getline(),cin.getline(),gets_s(),stringstream]  (0) 2022.06.28
[C++]-vector 사용법  (0) 2022.05.03
[c++]- map  (0) 2022.05.01
  1. 📕범위기반 반복문
  2. Map
  3. 👀이유 
  4. 1. 범위기반 for문에서는 index 정보가 존재하지 않는다.
  5. 2. 범위기반 for 배열의 요소를 변경할 수없다.
'Skils/C++' 카테고리의 다른 글
  • ios_base::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)을 붙여야 하는 이유
  • [C++] 공백을 포함한 문자열 처리[getline(),cin.getline(),gets_s(),stringstream]
  • [C++]-vector 사용법
  • [c++]- map
재한
재한
안녕하세요 💻
재한
짜이한
전체
오늘
어제
  • 분류 전체보기 (503)
    • Skils (117)
      • Android (51)
      • C++ (5)
      • Kotlin (36)
      • Algorithm (24)
      • Server (1)
    • CodingTest (228)
      • Programmers (45)
      • Baekjoon (183)
    • Experience (8)
      • 후기(코딩테스트,프로그램,프로젝트) (8)
    • Computer Science (70)
      • Design Pattern (2)
      • OOP (2)
      • Computer Architecture (14)
      • OS (2)
      • Software Engineering (3)
      • DataBase (8)
      • Network (39)
    • 학교 (75)
      • R프로그래밍 (26)
      • 회계와 사회생활 (17)
      • 컴퓨터학개론 (20)
      • it기술경영개론 (12)

블로그 메뉴

  • 홈
  • 태그
  • 카테고리
  • 글쓰기
  • 설정

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
재한
[C++] range based for(범위기반 for 반복문)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.