백터
동적배열 구조 클래스
중간 삽입 삭제가 빈번하게 발생하는 경우라면 비효율적이다.
단, 뒤에서 삽입삭제는 빠르다.
언제 벡터를 쓰는가?
내가 저장 하려는 데이터 개수가 가변적일때
중간에 데이터를 삽입하거나 삭제할 일이 빈번하게 발생하지 않고 마지막에서 추가나 삭제정도만 있을때
저장할 데이터가 많지 않고 많다면 검색이 빈번하게 일어나지 않을때
랜덤하게 데이터 접근을 허용할때
크기 가변
새로운 데이터가 할당되다가 할당 된 공간이 부족하다면 할당된 공간에 0.5배 만큼 크기를 늘려준다.
크기가 늘어날때 1.5배가 큰 벡터의 메모리를 새로 잡고 새로만든 벡터와 swap()이 이루어진다.(비용이 큼)
반복자 (iterator)
포인터랑 비슷한 개념. 컨테이너의 원소를 가리키고 가리키는 원소에 접근해서 다음 원소를 가리키게 하는 기능
벡터 컨테이너의 원소를 참조할 때 반복자(iterator)을 이용해서 순차적으로 참조 가능
벡터의 크기는 동적으로 바뀌기 때문에 iterator가 필요
장점
각각의 원소를 원소의 인덱스 값으로 바로 참조 가능하다.
원소들의 임의의 순서로 접근 할 수 있다.
벡터 끝에 새로운 원소를 추가하거나 제거
백터 멤버함수
생성자 | 벡터의 생성자 | - |
소멸자 | 벡터의 소멸자 | - |
operator = | 벡터의 내용 복사 | 오퍼레이터 연산 |
반복자
begin() | 시작 부분을 가리키는 반복자 리턴 | pointer |
end() | 끝 부분을 가리키는 반복자 리턴 | pointer |
rbegin() | 역순으로 첫번째를 가리키는 반복자 리턴 |
pointer |
rend() | 역순으로 끝 부분을 가리키는 반복자를 리턴 | pointer |
할당관련
size() | 벡터의 size를 리턴 | int |
max_size() | 벡터의 최대크기 | int |
resize(N) | 원소의 갯수을 N까지 수정한다. (capacity에는 영향이 없다.) | - |
capacity() | 벡터에 할당된 전체크기를 리턴한다. | int |
empty() | 벡터가 비었는지 체크 | bool |
reserve(N) | 벡터에 할당된 크기를 N개로 변경 ㄴcapacity를 확장하는 작업은 메모리를 새로 할당하고 벡터의 내욜을 새로운 장소에 복사해야 하기 때문에 이 함수를 사용해서 미리 크게 잡아준다. |
- |
원소 접근 관련
operator[N] | [N]번째 원소에 접근한다. | int |
at(N) | N번째 원소에 접근한다. | int |
front() | 첫번재 원소에 접근 | int |
back() | 마지막 원소에 접근 | int |
수정자
assign(N,X) | x값으로 n개의 원소를 할당 | - |
push_back(N) | 벡터 끝에 원소N을 집어 넣는다. | - |
pop_back() | 벡터 끝에 원소를 지운다. | - |
insert(N1,N2) | N1번째 원소에 N2값을 삽입한다. | - |
erase() | 비어있는지 체크한다. | boolean |
swap(<vector>) | 다른 vector와 값을 바꾼다. | - |
clear() | 원소를 모두 제거한다. | - |
할당자
get_allocation | 멤버 유형 allocator_type은 두 번째 템플릿 매개변수(Alloc)의 별칭으로 vector에 정의된 컨테이너에서 사용하는 할당자의 유형 |
멤버변수
reference | Allocator::reference | |
const_referece | Allocator::const_reference | |
iterator | 임의 접근 반복자(random access iterator) | |
const_iterator | 상수 임의 접근 반복자 (즉, 접근하는 원소의 내용을 수정 못함) | |
size_type | 벡터 size 를 나타내는 타입 (많은 경우 size_t 와 타입이 같으며 부호없는 정수이다) | |
differece_type | 벡터 내의 두 원소 사이의 거리를 나타내는 타입 (많은 경우 ptfdiff_t 와 타입이 같으며 부호있는 정수) | |
value_type | 원소 타입 (T) | |
allocation_type | 할당자 | |
pointer | 포인터 (Allocator::pointer) | |
const_poiner | 상수 포인터 (Allocator::const_pointer) | |
reverse_iterator | 역 반복자 (끝에서 부터 참조해나간다) reverse_iterator<iterator> | |
const_reverse_iterator | 상수 역 반복자 (reverse_iterator<const_iterator>) |
operator
int main ()
{
std::vector<int> foo (3,100); // three ints with a value of 100
std::vector<int> bar (2,200); // two ints with a value of 200
if (foo==bar) std::cout << "foo and bar are equal\n";
if (foo!=bar) std::cout << "foo and bar are not equal\n";
if (foo< bar) std::cout << "foo is less than bar\n";
if (foo> bar) std::cout << "foo is greater than bar\n";
if (foo<=bar) std::cout << "foo is less than or equal to bar\n";
if (foo>=bar) std::cout << "foo is greater than or equal to bar\n";
return 0;
초기 사용 설정
#include <vector>
using std::vector;
사용
vector<자료형> 식별자;
예시
Player
class Player
{
private:
string _name;
int _hp;
int _mp;
int _att;
int _def;
Player() {}
public:
Player(string name, int hp, int mp, int att, int def)
{
_name = name;
_hp = hp;
_mp = mp;
_att = att;
_def = def;
}
~Player() {}
void ToString()
{
cout << "-------------------------" << endl;
cout << "name :" << _name << endl;
cout << "hp :" << _hp << endl;
cout << "mp :" << _mp << endl;
cout << "att :" << _att << endl;
cout << "def :" << _def << endl;
cout << "-------------------------" << endl;
}
};
main
int main()
{
vector<Player*> vec;
vector<Player*>::iterator iter;
vec.push_back(new Player("A", 10, 10, 5, 3));
vec.push_back(new Player("B", 11, 10, 5, 3));
vec.push_back(new Player("C", 12, 10, 5, 3));
vec.push_back(new Player("D", 13, 10, 5, 3));
for(iter = vec.begin(); iter != vec.end() ; ++iter)
{
(**iter).ToString();
}
cout << "size : " << vec.size() << endl;
cout << "capacity : " << vec.capacity() << endl;
}
출력문
//출처
https://www.cplusplus.com/reference/vector/vector/
vector - C++ Reference
difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t
www.cplusplus.com
'C++ > C++' 카테고리의 다른 글
버블정렬 (0) | 2021.12.24 |
---|---|
템플릿(template) (0) | 2021.12.21 |
자료구조 : Stack (0) | 2021.12.21 |
malloc과 new의 차이 (0) | 2021.12.21 |
메모리 5대 영역 (0) | 2021.12.20 |