본문 바로가기
알고리즘

[C++] 데이터 구조(1) - Dynamic arrays(vector, string)

by lewns2 2021. 6. 12.

본 게시글은 "Competitive Programmer's Handbook"을 보며 임의로 해석하며 공부한 내용입니다.

 

데이터 구조컴퓨터 메모리에 데이터를 저장하는 방법이다.

문제에 적합한 데이터 구조를 선택하는 것은 중요하다.

왜냐하면 각각의 데이터 구조는 고유의 장단점을 지니기 때문이다. 

 

가장 중요한 질문은 "어떤 작업이 선택된 데이터 구조에서 효율적인가?" 이다.

 

Dynamic arrays(동적 배열)

 

동적 배열작업 실행 동안 크기를 바꿀 수 있는 배열을 말한다.

C++에서 가장 유명한 동적 배열은 vector 구조이다.

 

1. vector 구조

 

1.1 빈 벡터 생성과 요소 추가

vector<int> v;
v.push_back(3); // [3]
v.push_back(2); // [3,2]
v.push_back(5); // [3,2,5]

1.2 이후, 일반 배열과 같이 데이터에 접근

cout << v[0] << "\n"; // 3
cout << v[1] << "\n"; // 2
cout << v[2] << "\n"; // 5

1.3 size함수는 벡터 내 인자들의 수를 반환한다.

for(int i = 0; i< v.size(); i++) {
	cout << v[i] << "\n";
}
for(auto x : v) {
	cout << x << "\n";
}

 

1.4  back 함수는 벡터 내 마지막 인자를 반환하며, pop_back 함수는 마지막 인자를 제거한다.

vector<int> v;
v.push_back(5);
v.push_back(2);
cout << v.back() << "\n"; // 2

v.pop_back();
cout << v.back() << "\n"; // 5

1.5 세 가지 벡터 생성 방법

 

  1.5.1. 벡터 원소 직접 입력

vector<int> v = {2,4,2,5,1};

  1.5.2. 원소의 수(size) 설정 

 // size 10, initial value 0
vecotr<int> v(10); 

  1.5.3. 원소의 수, 초기값 설정

// size 10, initial value 5
vector<int> v(10, 5); 

 

2. String 구조

String 구조 또한 벡터와 같은 동적 배열이다.

 

2.1 문자열 합치기

Strings는 '+'기호를 통해 합칠수 있다. 이는 다른 데이터구조와 차별되는 특별한 구문이다.

string a = "hatti";
string b = a+a;
cout << b << endl; // hattihatti

2.2 부분 문자열: substr(k,x) 함수

substr(k,x) 함수는 위치 k에서 시작하여 x의 길이를 갖는 부문 문자열을 반환하다.

string a = "hatti";
string b = a+a;
cout << b << endl; // hattihatti

string c = b.substr(3,4);
cout << c << endl; // tiva
728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ/백준] 2798번 - 블랙잭  (0) 2021.06.21
[C++] 데이터 구조(2) - Set structures  (0) 2021.06.19
[C++] 정렬  (0) 2021.06.06
[C++][BOJ/백준][단계별로 풀어보기] 5. 1차원 배열  (0) 2021.06.06
그래프 탐색 알고리즘  (0) 2021.06.04