1. 배열을 반복해서 뒤집어야 하는 경우에는 포인터의 개념을 사용하면 시간복잡도를 상당히 줄일 수 있다.
vector<int> arr={1,2,3,4,5};
reverse(arr.begin(), arr.end());
for(auto it=arr.begin(); it!=arr.end(); ++it) { printf("%d ", *it); }
위 코드에서 뒤집기를 m번 할때, 시간복잡도가 \\( O(m\*N^2) \\)이지만
vector<int> arr={1,2,3,4,5};
bool rev=true;
if(rev){
for(auto it=arr.rbegin(); it!=arr.rend(); ++it) { printf("%d ", *it); }
}else{
for(auto it=arr.begin(); it!=arr.end(); ++it) { printf("%d", *it); }
}
위 코드는 뒤집기를 m번 할 때, 시간복잡도가 \\( O(N^2) \\)이다.
2. 문자열에 숫자를 추가할 때, 10을 넘어간다면 다른 방법을 사용해야한다.
vector<int> arr={1,2,3,4,5};
string answer="";
for(auto it=arr.begin(); it!=arr.end(); =+it){
answer+=(*it+'0");
answer+=",";
}
위 코드대로 한다면 answer="1,2,3,4,5"
가 제대로 저장된다고 생각할 수 있다. 하지만 10을 넘어가게 된다면 전혀 예상치 못한 답이 출력될 수 있다.
vector<int> arr={1,2,3,10,15}
라고 한다면answer="1,2,3,:,?"
가 저장될 것이다.
그 이유는 0
의 ASCII코드가 48, :
은 58, ?
은 63이기 때문이다.
'프로그래밍 > 나의 디버깅 노트' 카테고리의 다른 글
[ps][c++] the way to erase element by using reverse_iterator on set, multiset (0) | 2021.06.02 |
---|---|
[ps] n*n배열을 두개의 그룹으로 나눠서 연산을 구할때 시간최적화 (0) | 2021.06.01 |
[ps][c++] 문자열 다루기 (0) | 2021.05.30 |
[ps][c++] cin을 사용하다가 scanf("%1d")를 사용해야 할 때 (0) | 2021.05.04 |
[ps][c++] test-case마다 vector을 초기화 하는 방법 (0) | 2021.05.02 |