오늘 알아볼 내용은 범위 기반 반복문이다.
📕범위기반 반복문
기존의 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 |
오늘 알아볼 내용은 범위 기반 반복문이다.
📕범위기반 반복문
기존의 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 |