1. vector container 란?

자동으로 메모리가 할당 되는 배열

vector 구조

 

2. vector의 사용

<vector> 헤더파일을 추가해야 한다.

using namespace std; 를 사용하면 편리하다. 

 

3. vector의 생성자

① vector<int> v;

 - 비어 있는 vector v를 생성

 

② vector<int> v(10);

 - 기본 값(0)으로 초기화 된 10개의 원소를 가지는 vector v를 생성

 

③ vector<int> v(10,5)

 - 2로 초기화 된 10개의 원소를 가지는 vector v를 생성

 

vecotr<int> v1(10,5);

     vector<int> v2(v1);

 - v1 vector를 복사해서 v2 생성

 

 * 연산자 "==", "!=", "<", ">", "<=", ">="로 대소 비교 가능

 

4. vector의 멤버 함수

* vector<int> v; 라고 가정

① v.assign(5,2); 

 - 2의 값으로 5개의 원소 할당

 

② v.at(index)

 - index번째 원소 return

 - v[index] 보다 속도는 느리지만, 범위를 점검하므로 안전

    v[index]

 - index번째 원소 return

- 범위를 점검하지 않으므로 속도가 v.at(index)보다 빠름

 

 v.front();

 - v의 첫번째 원소를 return

   v.back();

 - v의 마지막 원소를 return

 

 v.clear();

 - v의 모든 원소 제거

 - 원소만 제거하고 메모리는 남아있음 (size만 줄어들고, capacity는 그대로 남아있음)

 

v.push_back(7)

 - v의 마지막 원소 뒤에 7을 삽입

     v.pop_back()

 - v의 마지막 원소를 삭제

 

⑥ v.clear()

 - v의 모든 원소 제거

 - 원소만 제거하고 메모리는 남아있음 (size만 줄어들고, capacity는 그대로 남아있음)

 

v.begin()

 - v의 시작점의 주소 값 return

    v.end()

 - v의 마지막부분의 다음 주소 값 return

 

v.rbegin()

 - v의 끝 지점을 시작점으로 return

     v.rend()

 - v의 시작점 다음지점을 끝 부분으로 return

 

v.reserve(n)

 - n만큼의 capacity를 설정

 - n이 현재 capacity보다 클 때만 동작, 작으면 아무 일도 일어나지 않는다.

   v.resize(n)

 - size를 n으로 변경, 현재 size보다 n이 클 경우 인자의 값을 default값인 0으로 초기화

     v.resize(n,3)

 - size를 n으로 변경, 현재 size보다 n이 클 경우 인자의 값을 3으로 초기화

 

 

⑩ v.size()

 - v의 원소 갯수를 return

     v.capacity()

 - v의 할당된 공간의 크기를 return 

 

⑪ v2.swap(v1)

 - v1과 v2의 원소과 capacity를 바꿈(모든 걸 swap)

 

⑫ v.insert(2,3)

 - 2번째 위치에 3의 값을 삽입

 - 삽입한 곳의 iterator를 return

     v.insert(2,3,4)

 - 2번째 위치에 3의 값을 4개 삽입

 

 v.erase(index)

 - index가 가리키는 원소를 제거

      v.erase(start,end)

 - start이상, end 미만이 가르키는 원소를 제거

 

⑭ v.empty()

 - v가 비어있으면 return true

 


https://blockdmask.tistory.com/70

 

[C++] vector container 정리 및 사용법

안녕하세요.  BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..

blockdmask.tistory.com

 

*[개발자 지망생]님 블로그를 보고 공부하며 제가 보기 편하게 정리 한 글 입니다.*

'Study > C++' 카테고리의 다른 글

[C++] string 클래스 정리  (0) 2021.10.29

1. 생성

헤더 파일 : <string>

 

 string str("abcd");  // 바로 생성

 string str1;                 // 선언 후 값 주기

      str1 = "abcd";

 string str2(str1);

 

* 문자열 끝에 null이 들어가지 않는다.


2. 인자 접근

① str.at(index);

해당 위치(index)에 해당하는 문자를 반환한다. index가 범위를 벗어나면 예외 리턴.

 

함수 예시 : str.at(0);    // "Hello" -> 'H'를 리턴


② str.operator[index]

일반 배열처럼 대괄호를 이용해서 인자에 접근 가능하다. 

해당 위치(index)에 해당하는 문자를 반환한다.

*at과 다른 점 : index(인덱스) 범위를 검사하지 않기 때문에 at 함수보다는 빠르다.

하지만 예외를 리턴하지 않는다. 

 

함수 예시: str[0];    // "Hello" -> 'H'를 리턴

 

③ str.front();

맨 앞 인자를 반환한다.

 

함수 예시: str.front();    // "Hello" -> 'H'를 리턴

 

④ str.back();

맨 뒤 인자를 반환한다.

 

함수 예시: str.back();    // "Hello" -> 'o'를 리턴


3. size 관련 함수

str.size();

사이즈를 반환한다.

 

함수 예시: str.size();    // "Hello" -> 5를 리턴

 

str.length();

길이를 반환한다. (size()와 같다고 생각하면 된다.)

 

함수 예시: str.length();    // "Hello" -> 5를 리턴

 

str.capacity();

할당된 메모리 크기(bytes)를 반환한다.

메모리 할당을 size(길이)에 대비해서 여유롭게 한다.

size(길이)가 capacity(메모리)를 넘게 될 때 새롭게 더 큰 capacity(메모리)를 할당한다.

 

함수 예시 : str1.capacity();    // "HelloHello" size(길이)는 10, capacity(메모리)는 15

함수 예시 : str2.capacity();    // "HelloHelloHelloH" size(길이)는 16, capacity(메모리)는 31

 

str.resize(n); , str.resize(n,c);

string을 n만큼의 크기로 만든다. 

만약 그 크기가 원래 사이즈보다 작다면, 남은 스트링을 버린다.  

만약 그 크기가 원래 사이즈 보다 크다면, 빈 공간으로 남은 공간을 채운다.

만약 c를 사용한다면 남은 공간을 c로 채울 수 있다.

 

함수 예시 : str.resize(5)          // "HelloHello" -> "Hello" size는 5

함수 예시 : str.resize(6)          // "Hello" -> "Hello " size는 6, 제일 뒤에 빈칸

함수 예시 : str.resize(10, 'v') // "Hello" -> "Hello vvvv" 

 

⑤ str.shrink_to_fit();

string 길이에 비해 낭비되고 있는 capacity(메모리)를 줄이는 함수이다.

 

함수 예시 : str.resize(5);                // "HelloHelloHelloH

                                                                  > "Hello" size(길이)는 5지만  capacity(메모리)는 여전히 31

함수 예시 : str.shrink_to_fit();    // "Hello"처럼 size(길이) 5가 된 string의 capacity(메모리)에

                                                                    알맞게 str의 capacity(메모리)가  31->15으로 줄어든다.

 

⑥ str.reserve(n);

string을 넣기 전, 미리 n만큼의 size(길이)에 맞는 capacity(메모리)를 할당하는 함수이다.

⑦ str.clear();

 스트링에 들어있는 문자열을 지우는 함수이다. 

이때, size와 length는 0이 되고, capacity는 그대로 남게 됩니다.

 

함수 예시 : str.clear();    // "Hello" -> "" 

                                                    size와 lenth는 0이 되고, capacity(메모리)는 15 그대로 이다.

                                                    (메모리 해제X)

 

⑧ str.empty();

스트링이 비었는지 확인하는 함수이다. 비었으면 true를 반환한다. 

비었음의 기준은 size, length가 0인 것 이다. capacity(메모리)와는 관계가 없다.

 

함수 예시 : if(str.empty()) { return true; }  


4. 

 str.c_str();

C++의 string 문자열을 C의 문자열로 변경해주는 함수이다.

 

함수 예시 : const char* arr = str.c_str();    // "HelloHello" -> "HelloHello\0"로 반환.

 str.substr(); , str.substr(index); , str.substr(index, len);

string을 잘라서 반환하는 함수이다.

 

함수 예시 : str.substr();            // "HelloHello" 그대로 반환.

함수 예시 : str.substr(6);         // "ello"를  반환. index 5 번째 인자부터 끝까지의 string을 반환.

함수 예시 : str.substr(6, 1);    // "e"를 반환. 5번째 인자부터, 1의 길이만큼 string을 반환.

 str.replace(index, len, str2);

string의 index위치에서 len 길이까지의 범위를 매개변수로 들어온 str2 전체로 대체 하는 함수이다.

 

함수 예시 : str1.replace(5, 2, str2);

// "HelloHello"의 5번째 인자에서부터 2개를 str2("AAAA")로 대체한다.

     -> "HelloAAAAllo" 로 변경
함수 예시 : str1.replace(str1.find("AAAA"), 2, "He");

// "HelloAAAAllo"에서 "AAAA"를 찾아 "He"로 대체한다.

     -> "HelloHello" 로 변경

 

 str.compare(str2); 

매개변수로 들어온 str을 비교해서 같으면 0을 반환하고, 다르면 0이 아닌 값을 반환하는 함수이다.

매개변수로 들어온 스트링의 값보다 작을때(사전순 빠를때) 음수(0보다 작은값)를 반환하고 ,

매개변수로 들어온 스트링의 값보다 클때(사전순 느릴때) 양수(0보다 큰값)를 반환한다.

 

함수 예시 : str1.compare(str2);

// str1("Hello"), str2("HiHi")는 같지 않기 때문에 0이 아닌 값을 반환하고,

     H까지는 둘이 똑같고, 그다음 str1의 "e"와, str2의 "i"를 비교한다.

    이때, "e"가 "i"보다 사전상 더 앞선글자이기 때문에 str1이 더 작은 글자가 된다.

    그렇기 때문에 음수(0보다 작은값)를 반환하게 된다.

함수 예시 : str1.compare("Hello");

// str1("Hello")와 "Hello"는 같기 때문에 0을 반환한다.

함수 예시 : str1.compare(0, 1, str2);

// str1("Hello")의 0번째 인덱스 부터 길이가 1인 문자열 "H"와 

     str2("HiHi) 를 비교한다. 두 문자열이 다르기 때문에 0이 아닌 수를 반환합니다.

함수 예시 : str1.compare(0, 1, str2, 0, 1);   

// str1("Hello")의 0번째 인덱스 부터 길이 1인 문자열 "H"와 

     str2("HiHi")의 0번째 인덱스 부터 길이 1인 문자열 "H"를 비교한다.

     비교할 문자열이 같기 때문에 0을 반환한다.

 

⑤ str1.copy(arr, len, index);

복사를 하는 함수이다.

함수 원형 : size_t copy(char* arr, size_t len, size_t index = 0) const;

첫번째 매개변수 : char* 인걸 보면, C언어의 문자열(배열타입)을 받습니다. 

두번째 매개변수 : 복사할 문자열의 길이

세번째 매개변수 : 복사를 시작할 위치

return 값 :  실제로 복사된 길이, arr의 길이를 반환합니다.

 

함수 예시 :  char arr[10];                                          // 문자열을 복사해서 넣을 빈 배열을 만듭니다.

                      int arrLen = str1.copy(arr, 3, 2);    // index 2부터 3의 길이만큼 복사 -> "Hello"   

                                                                                             실제로 복사된 길이 3 반환

                      arr[arrLen] = '\0';                                 // C의 문자열의 끝에는 '\0'

⑥ str.find(str2); , str.find(str2, index);

매개변수로 들어온 문자열과 일치하는 게 있는지 확인하는 함수이다.  

만약에 일치하는게 있다면, 일치하는 부분의 첫번째 순서(index)를 반환한다.

두번째 매개변수로 들어온 index는 찾을 위치.

 

함수 예시 : str1.find("Hello");         // str1("HelloHello") 와 "Hello"를 비교

                                                                      -> 일치하는 부분의 첫번째 순서(index)인 0을 반환

함수 예시 : str1.find("Hello", 5);    // str1("HelloHello") 와 "Hello"를 5번째 인자부터 비교

                                                                       -> 일치하는 부분의 첫번째 순서(index)인 5를 반환

⑦ str.push_back(c);

함수를 호출하는 스트링의 맨뒤에 문자 c를 더하는 함수 이다.

 

함수 예시 : str.push_back('a');      //"HelloHello" -> "HelloHelloa"

⑧ str.pop_back();

함수를 호출하는 스트링의 맨뒤에 있는 문자 하나를 없애는 함수 이다.

 

함수 예시 : str.pop_back();            //"HelloHelloa" -> "HelloHello"


5. iterator 종류

 str.begin();

문자열의 첫 번째 문자를 가리키는 반복자(iterator 포인터)를 반환

 str.end();

문자열의 마지막의 바로 다음을 가리키는 반복자(iterator 포인터)를 반환


5. 기타 등등

swap(str1, str2)

str1과 str2를 바꾸는 함수. 서로 참조(reference)를 교환해서 스왑을 한다.

 

함수 예시 : swap(str1, str2);       // str1("Hello") ,str2("HiHi") -> str1("HiHi"), str2("Hello")


operator+

이어붙이기

 

함수 예시 : str1 += str2;                // str1("HiHi") += str2("Hello") = str1("HiHiHello") 


*[개발자 지망생]님 블로그를 보고 공부하며 제가 보기 편하게 정리 한 글 입니다.*

 

출처: https://blockdmask.tistory.com/338 [개발자 지망생]

'Study > C++' 카테고리의 다른 글

[C++] vector container  (0) 2022.01.06

+ Recent posts