일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- tcp
- go언어
- Golang
- mutex
- Callback
- Linux
- json
- windows
- channel
- write
- c++
- API
- range
- install
- Python
- 책
- package
- JavaScript
- Close
- C
- File
- 리뷰
- bitcoin
- go
- 영화
- Sync
- FOR
- http
- window
- GO 언어
- Today
- Total
목록std (2)
Code Habit
c++ 문자열에서 특정 문자열을 찾을 때 std::string의 find 함수를 사용한다. 보통 아래와 같이 많이 사용한다. std::string text = "abcdefg"; size_t nPos = text.find("cde"); 위 코드에서 nPos의 값은 찾고자 하는 문자열의 시작 위치가 된다. 즉 text.find("cde")는 2를 반환하게 된다. 이렇게 쉽고 편리하게 원하는 문자열을 찾을 수 있는데 하나 주의할 점이 있다. 찾고자 하는 문자열이 없을 때다 보통 찾고자 하는 문자열이 없을때 -1이 반환된다고 생각하는데 여기서는 그렇지 않다. -1이 아닌 매우 큰 수의 쓰레기 값이 반환된다. 그래서 만약 다음과 같이 쓰면 런타임 에러를 발생할 수 있다. std::string text = "ab..
std::erase 함수는 해당 인덱스의 데이터를 지우고 그 뒤에 있는 데이터를 남은 자리만큼 앞으로 이동시킨다. 그러므로 자료구조를 순차적으로 탐색하여 원하는 인덱스에 erase를 사용할 땐 주의가 필요하다. 예를 들어보자. 1 2 3 4 5 6 7 8 9 10 11 vector vec; vector::iterator it; for(it = vec.begin(); i != vec.end(); ) { if (삭제의 조건문) { it = vec.erase(it); } else { it++; } } erase함수로 지우면 한칸씩 앞으로 당겨지기 때문에 지우지 않을 때만 it++를 해준다. 해당 iterator의 요소를 삭제해버리면 그 iterator는 무효화가 된다. it값이 사라져버리는 것이다. 다행히도 ..