STL공부하는데..... cpp공부를 다시해야할 것 같아서...
이렇게 한번씩 적어가며 정리하는게 도움될 것 같아서 티스토리를 만들었다
그냥 공부하는데 혼잣말하는 일기장정도^^
모든 글은 다른 글에서 퍼오거나 인용, 서치 또는 gpt와 함께한 내 머릿속에서 나온 문장임을..ㅎ
STRING
└ string에 대하여..
└ string은.. c에서 사용했던 char* 나 char[]와 다르게
문자열 끝에 '\0' 이 포함되지 않아 문자열의 길이를 동적으로 변경가능하게함!! -> heap에 저장된다
힙 메모리에 문자열을 저장한다.. (동적메모리)
변경 가능하다.. -> mutable 하다..
string은.. space까지만 읽기 때문에 cin으로 입력받게되면
이런식으로 hello its mymymy를 입력하면... hello 뒤에는 공백space가 들어갔기에 뒤에 its mymymy는 저장하지 않음..
만약에 string을 사용해 공백까지 다 받고싶다면?!
getline을 사용해주자...
getline을 사용하면 공백을 포함한 한 줄 전체를 입력받을 수 있다
이렇게 하면~~
공백도 같이 출력되는 것을 볼 수 있다...
이제 string_view... 에 관해서
stl 첫시간에 save함수를 만들면서.. string_view에 대해 말씀하시는데 따로 공부를 해야될 것 같아서ㅎ
string_view는..
문자열을 참조하는 가벼운 객체! (메모리 할당이 X)
기존 문자열을 참조. 만 한다. 읽기만 할 수 있음
(얕은 복사의 개념..)
문자열을 직접 저장하지 않고.. 읽기. 정말 view역할만 한다..! 읽기전용으로 쓸 것..
새로운 문자열을 저장(생성)하는 기능은 Xxx
또한 문자열 수정도 불가능하다..
언제 string_view를 쓰냐..
- 문자열을 단순히 읽기만 할 때
- 함수에서 문자열을 전달할 때.. (불필요한 복사 방지)
"값을 가진다" vs "참조한다"
값을 가진다 (value)
- 실제 데이터를 메모리에 저장하고, 그 데이터를 소유하는 것
- 데이터를 직접 복사해.. 내 것이 된다..(독립적인 복사본을 가짐!)
참조한다 (reference)
- 이미 존재하는 데이터를 가리키기만 하는 것!!
- 새로운 데이터를 복사하지 않고, 원래 데이터의 주소(포인터)만 저장함..
- 따라서 원본 데이터가 사라지면 문제가 발생할 수 있다..->아마 dangling pointer
이런식으로 str2는 str1 원본을 참조.. 여기서 str2는 새로운 메모리를 할당하지 않고, str의 데이터만을 가리키는 역할!
메모리 낭비가 없고 빠르게 동작하지만.. 원본 str1이 사라지면 문제가 된다.. 이게 dangling pointer (이미 해제된 메모리를 가리키는 포인터)
수정하려그려면 오류가 뜸
어쨌든.. string_view는 참조만 가능, 수정 안됨.. 읽기만 하자
250311
'cpp(stl)' 카테고리의 다른 글
cpp6(RAII/throw/unique_ptr) 4w1 (0) | 2025.04.08 |
---|---|
cpp5(stream_iterator/vector로 파일읽기/structured binding/연산자오버로딩) (0) | 2025.03.27 |
cpp4(파일입출력/바이너리모드/저수준출력) (0) | 2025.03.19 |
cpp3(안전배열/file입출력) (0) | 2025.03.19 |
cpp2(template-1) (0) | 2025.03.12 |