vector의 resize 함수를 사용할 때 어떤 방식으로 작동하는지 궁금해서 찾아봤다.


resize 함수는 vector를 초기화한 뒤 사이즈를 변경해주는 것이 아니라

1) 매개변수의 값이 vector의 사이즈보다 작으면 사이즈가 매개변수 값이 될 때 까지 끝에서부터 삭제

2) 매개변수의 값이 vector의 사이즈보다 크면 vector의 기존 요소는 변경되지 않고 뒤에 요소를 추가


--------------------------------------------------------------------------------------------------------------

2) 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);
temp.push_back(4);
 
cout << "~~resize before~~" << endl;
for (int i = 0; i < temp.size(); i++) {
    cout << temp[i] << endl;
}
 
temp.resize(5);
cout << "~~resize after~~" << endl;
for (int i = 0; i < temp.size(); i++) {
    cout << temp[i] << endl;
}
cs



--------------------------------------------------------------------------------------------------------------

1) 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);
temp.push_back(4);
 
cout << "~~resize before~~" << endl;
for (int i = 0; i < temp.size(); i++) {
    cout << temp[i] << endl;
}
 
temp.resize(2);
cout << "~~resize after~~" << endl;
for (int i = 0; i < temp.size(); i++) {
    cout << temp[i] << endl;
}
cs


https://msdn.microsoft.com/ko-kr/library/wezs0zy6.aspx

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

[C++] switch문 내부에서 변수 선언시 오류  (0) 2016.12.12
[라이브러리] string class 함수  (0) 2016.03.01

switch문에서 변수를 선언하여 사용하려 할 경우 변수를 선언하지 않은 다른 case문에서 오류가 발생함


1
2
3
4
5
6
7
switch (val) {
     case 1
          int newVal = 42
          break
      case 2
          break
}
cs


case 지정은 switch내 해당하는 label로 점프하기 위하여 사용됨


블록이 시작하면 지역변수를 위한 공간이 메모리에 할당

그러나 val != 1 일 경우 초기화 부분이 실행되지 않는 문제점이 생겨버림

위 코드는 블록이 하나밖에 없는 상태이기 때문


case마다 블록을 지정해주면 다른 case에서 초기화 하지 않아도 됨


1
2
3
4
5
6
7
8
switch (val) {
     case 1: {
          int newVal = 42
          break
     }
      case 2
          break
}
cs


http://hashcode.co.kr/questions/372/%EC%99%9C-%EC%8A%A4%EC%9C%84%EC%B9%98-%EB%AC%B8%EC%97%90%EC%84%9C%EB%8A%94-%EB%B3%80%EC%88%98%EB%A5%BC-%EC%84%A0%EC%96%B8%ED%95%A0-%EC%88%98-%EC%97%86%EC%96%B4%EC%9A%94

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

[C++] vector의 resize  (0) 2017.06.02
[라이브러리] string class 함수  (0) 2016.03.01

알고스팟에서 자주 string자료형을 사용해서 정리좀..


Header : string

namespace : std

#include <string>


s.size(), s.length() : 문자열의 길이를 반환

s.max_size() : 할당할 수 있는 가장 큰 문자열 사이즈 반환


s.resize() : 문자열의 크기를 재설정

(크기) : 크기만큼 사이즈 변경

(크기, 문자) : 크기가 커질 경우 빈 공간에 문자가 새로 추가됨


s.capacity() : 문자열에 실제 담을 수 있는 사이즈(할당된 메모리)를 반환

capacity가 size보다 클 때 속도가 더 빠름

capacity가 size보다 작으면 문자를 추가하기 위해 새로운 메모리를 할당해야 하기 때문


s.reserve(용량)문자열의 capacity를 변경할 수 있음

용량의 크기가 현재 capacity보다 크지 않으면 수행되지 않음


s.empty() : 문자열이 비어있는지 확인

size()==0 보다 일반적으로 빠름


s.assign()문자열을 할당

(문자열) : 문자열 할당 

(개수, 문자) : 문자를 개수만큼 할당

(문자열, 시작위치, 개수) : 매개변수인 문자열을 시작위치부터 개수만큼 호출한 문자열에 할당


s.append() : 문자열의 끝에 문자열 할당

(문자열) : 끝에 문자열 추가

(개수, 문자) : 문자를 개수만큼 끝에 추가

(문자열, 시작위치, 개수) : 매개변수인 문자열을 시작위치부터 개수만큼 호출한 문자열에 할당


s.swap(문자열) : 문자열과 매개변수인 문자열을 서로 바꿈


s.at(위치) : 문자열에서 특정 위치의 문자에 접근하거나 대입


s.c_str() : 문자열을 null로 끝나는 char*형으로 바꾸어 반환

리턴하는 값은 재할당이 일어나는 연산(append(), insert())을 수행한 뒤에 유효하지 않을 수 있음


s.data() : 문자열을 구성하는 문자 버퍼에 대한 포인터 반환


s.begin(), s.end() : 문자열의 처음과 끝을 가리키는 임의접근 반복자 반환

반복자가 가리키는 값은 각 문자들


//마저 추가

s.insert() : 

s.erase() : 


s.replace() : 


s.copy() : 


s.substr() : 


s.compare() : 


s.find() : 

s.rfind() : 




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

[C++] vector의 resize  (0) 2017.06.02
[C++] switch문 내부에서 변수 선언시 오류  (0) 2016.12.12

+ Recent posts