프로그래밍/C++

vector

swedu 2023. 2. 27. 12:12
728x90
반응형

2023.02.17  최초 작성

 

 

연속된 메모리 공간을 갖는 배열 구조이다. 내부에서 자동으로 동적 할당하며 배열 공간의 크기를 관리한다.

 

 

선언 및 초기화

vector<자료형> 변수명
vector<자료형> 변수명(숫자)
vector<자료형> 변수명 = { 변수1, 변수2, 변수3... }
vector<자료형> 변수명[] = {, }
vector<vector<자료형>> 변수명
vector<자료형>변수명.assign(범위, 초기화할 값)

 

 

 

반복자

v.begin() 백터 시작점의 주소 값 반환
v.end() 백터 (끝부분 + 1) 주소값 반환
v.rbegin() (revers begin) 백터의 끝 지점을 시작점으로 반환
v.rend() (revers end) 백터의 (시작 + 1) 지점을 끝 부분으로 반환

 

 

요소 접근

v.at(i) 백터의 i번째 요소 접근 (범위 검사함)
v.[i] (operator []) 백터의 i번째 요소 접근 (범위 검사 안함)
v.front() 백터의 첫번째 요소 접근
v.back() 백터의 마지막 요소 접근

 

요소 삽입과 삭제

v.push_back(변수값) 백터의 마지막 부분에 새로운 요소 추가
v.pop_back() 백터의 마지막 부분 제거
v.insert(삽입할 위치의 주소 값, 변수 값) 사용자가 원하는 위치에 요소 삽입
v.emplace(삽입할 위치의 주소 값, 변수 값) 사용자가 원하는 위치에 요소 삽입(복사생성자 X)
v.emplace_back(변수값) 백터의 마지막 부분에 새로운 요소 추가(복사생성자 X)
v.erase(삭제할 위치)
v.erase(시작위치, 끝위치)
사용자가 원하는 index값의 요소를 지운다
v.clear() 백터의 모든 요소를 지운다.(return size = 0)

 

 

용량

v.empty() 비었으면 true 아니면 false
v.size() 백터의 크기 반환
v.capacity() 백터의 실제크기(최대크기) 반환
v.max_size() 백터가 system에서 만들어 질 수 있는 최대 크기 반환
v.reserve(숫자) 백터의 크기 설정
v.shrink_to_fit() capacity의 크기를 백터의 실제 크기에 맞춤

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);

	cout << "v의 첫번째 요소 : " << v.front() << endl;
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << ' ' << v.at(i) << endl;
	}
	cout << "v의 마지막 요소 : " << v.back() << endl;
	v.insert(v.begin() + 2, 25); // 삽입
	cout << "2번지에 25 삽입 후 : " << endl;
	for (vector<int>::iterator itr = v.begin(); itr != v.end(); ++itr) {
		cout << *itr << endl;
	}
	v.erase(v.begin() + 4);  // 삭제
	cout << "4번지 삭제 후 : " << endl;
	for (int element : v) {
		cout << element << endl;
	}
	return EXIT_SUCCESS;
}

[실행 결과]

v의 첫번째 요소 : 10
10 10
20 20
30 30
40 40
50 50
v의 마지막 요소 : 50
2번지에 25 삽입 후 :
10
20
25
30
40
50
4번지 삭제 후 :
10
20
25
30
50

 

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Student {
private:
	string name;
	int kor;
	int eng;
	int math;
public:
	Student(string name, int kor, int eng, int math) :
		name(name), kor(kor), eng(eng), math(math) {}
	~Student() {}
	void print() {
		cout << "학생이름 : " << this->name << endl;
		cout << "국어점수 : " << this->kor << endl;
		cout << "영어점수 : " << this->eng<< endl;
		cout << "수학점수 : " << this->math << endl;
	}
};
int main() {
	vector<Student> v;
	v.emplace_back("홍길동", 100, 90, 80);
	v.emplace_back("이순신", 80, 90, 100);
	v.emplace_back("유관순", 77, 88, 99);
	cout << "학생 수 : " << v.size() << endl;
	while (!v.empty()) {
		v.back().print();
		v.pop_back();
	}
	cout << endl;
	vector<Student*> v2;
	v2.push_back(new Student("김구", 99, 88, 88));
	v2.push_back(new Student("안중근", 100, 99, 98));
	cout << "학생 수 : " << v2.size() << endl;
	for (Student* s : v2) {
		s->print();
	}

	cout << endl << "번지로 접근 : " << endl;
	v2[1]->print();
	return EXIT_SUCCESS;
}
[실행 결과]
학생 수 : 3
학생이름 : 유관순
국어점수 : 77
영어점수 : 88
수학점수 : 99
학생이름 : 이순신
국어점수 : 80
영어점수 : 90
수학점수 : 100
학생이름 : 홍길동
국어점수 : 100
영어점수 : 90
수학점수 : 80

학생 수 : 2
학생이름 : 김구
국어점수 : 99
영어점수 : 88
수학점수 : 88
학생이름 : 안중근
국어점수 : 100
영어점수 : 99
수학점수 : 98

번지로 접근 :
학생이름 : 안중근
국어점수 : 100
영어점수 : 99
수학점수 : 98

 

 

 

728x90
반응형

 

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

파일 입출력  (0) 2023.02.28
list  (0) 2023.02.27
가상함수, 순수가상함수, 추상클래스  (0) 2023.02.24
상속  (0) 2023.02.23
연산자 중복  (0) 2023.02.21