티스토리 뷰
item 16 : Know how to pass vector and string data to legacy APIs.
Chaed 2018. 1. 31. 22:58이번장은 C-style API와 stl의 혼용에 대한 장입니다.
이해하는데 달리 큰 어려운점은 없는 장이구요.
stl의 vector와 string은 근본적으로 구조가 c-style array와 layout이 같습니다.
따라서 int*, char*등의 primitive type pointer와 vector, string의 포인터는 서로 사용이 가능합니다.
예를들어 다음과 같은경우입니다.
다음처럼 vc 원소를 &를 통해 pointer를 넘길 수 있습니다.
반대로, 배열 a의 사용방법도 이상이 없습니다.
string의 경우에는 특별히 주의가 필요합니다.
왜냐하면 c api는 char array에서 null을 항상 요구합니다.
가령 strlen, strcpy같은 함수들이죠.
항상 char 문자열의 끝은 null입니다. 따라서 strlen와 같은 함수에 &s[0]을 넘기는것이 아닌
string의 member function인 c_str를 호출하여 매개변수로 넘겨야 합니다.
c_str은 string이 갖고있는 문자열을 const char*로 반환해주는 함수입니다.
한가지 주의할 점으로는 소스에서 create함수와 같이 container의 member fuction을 통해서가 아닌
외부에서, 그러니까 포인터를 이용해 직접 원소를 새로 할당한다던지 하는 접근은 해서 안됩니다.
원소가2개 있다면 애시당초 .at(2)와 같이 접근도 불가능하겠지만
소스에서와같이 포인터연산으로 접근하여 새로운 원소를 할당하게 되면
continer가 이를 인지하지 못하기때문에 원소가 늘어남에도 재할당을 하지도 않을 뿐더러
size또한 그대로 그대로 남게 됩니다.
'프로그래밍 > C C++' 카테고리의 다른 글
Item 19: Understand the difference between equality and equivalence (0) | 2018.04.17 |
---|---|
Item 17 : Use "Shrink to fit" to trim excess capacity (0) | 2018.02.24 |
item14 : Use reserve to avoid unnecessary reallocations. (0) | 2018.01.24 |
item 9 : Choose carefully among erasing options (0) | 2018.01.03 |
item 8 : Never create containers of auto_ptrs. (0) | 2017.12.18 |
- Total
- Today
- Yesterday
- 여행
- linux
- Spring
- cpp
- C language
- 알고리즘
- 문자열
- 정규표현식
- C++
- 악보
- link
- yiruma
- 드럼
- 코드잼
- 사천
- kernerl
- Codejam
- 중국
- 이루마
- compile
- regex
- printf
- Algorithm
- peram jam
- 카카오 공채
- STL
- 피아노
- 중국여행
- Pointer
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |