영넌 개발로그

[C++ 기초] Vector 본문

코딩/C++

[C++ 기초] Vector

영넌 2020. 10. 27. 03:18

array of object

static array : Person p[10]

#include <iostream>

using namespace std;

class Person
{
public:
	int age;
	Person() : age(0) {};
};

int main() {
	
	Person p[10];
	for (auto& i : p) {	//레퍼런스 안붙이면 메모리를 i의 새로 할당받아서 복사하는거임
		cout << "Age: " << i.age << endl;
	}

	/*
	for (int i = 0; i < 10; i++) {
		cout << "Age: " << p[i].age << endl;
	}
	*/

	return 0;
}

 

array by vector

- #include <vector> 필요 

- SLL 이라 생각하면 편하다

- 선언: vector<data_type> vname;

vname.push_back( ) 맨 뒤에 새로운 걸 하나 넣는다
vname.front( ) 맨 앞에 다른 이름 (reference)
vname.back( ) 맨 뒤에 다른 이름 (reference)
vname.pop_back( ) 맨 뒤에 있는 걸 뺀다 (return 값이 없다)
vname.empty( ) 요소가 있냐 없냐를 나타냄

 

#include <iostream>
#include <vector>

using namespace std;

int main() {

	vector<int> ivector;
	ivector.push_back(10);
	ivector.push_back(20);
	ivector.push_back(30);

	cout << ivector.empty() << endl;
	cout << "front: " << ivector.front() << endl; //10
	//ivector.pop_back();  이거 하면 아래 프린트 20
	cout << "back: " << ivector.back() << endl;   //30

	for (auto& i : ivector) {
		cout << " " << i;
	}
	cout << endl;



	return 0;
}

 

vname.begin( ) 첫 주소, 주소들의 sequnce (iterator)
vname.end( ) 마지막 주소, 주소들의 sequnce (iterator)
vname.erase(vname.begin( ) + i ) 특정 위치의 값을 지운다
vname.insert(vname.begin( ) + i, value); 특정 위치에 값을 넣는다.
#include <iostream>
#include <vector>

using namespace std;

int main() {

	vector<int> ivector;
	ivector.push_back(10);
	ivector.push_back(20);
	ivector.push_back(30);

	for (auto p = ivector.begin(); p != ivector.end(); p++) {
		cout << " " << *p;
	}
	cout << endl;		

	ivector.erase(ivector.begin() + 1);
	ivector.insert(ivector.begin() + 2, 999);

	for (auto p = ivector.begin(); p != ivector.end(); p++) {
		cout << " " << *p;
	}
	cout << endl;

	return 0;
}

 

인덱스 사용해서 쓸 수도 있음

vname.at( i ) 사용 가능
vname[ i ] 사용 가능
#include <iostream>
#include <vector>

using namespace std;

int main() {

	vector<int> ivector;
	ivector.push_back(10);
	ivector.push_back(20);
	ivector.push_back(30);

	for (int i = 0; i < ivector.size(); i++) {
		cout << " " << ivector.at(i);
		//cout << " " <<ivector[i];
	}

	return 0;
}

 

Vector operators

- 간편한 복사, 간편한 비교, 간편한 sorting, 간편한 2차원배열

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(int& a, int& b) {
	return a < b;
}


int main() {

	vector<int> v1 = { 45,98,34,23,66 };
	vector<int> v2;

	v2 = v1;	//벡터의 복사

	//v2 출력
	for (auto& e : v2) {
		cout << " " << e;
	}
	cout << endl;

	//벡터의 비교
	if (v1 == v2) {
		cout << "same" << endl;
	}
	else {
		cout << "differnet" << endl;
	}

	//벡터의 정렬
	//#include <algorithm> 사용
	sort(v1.begin(), v1.end(), compare);

	cout << "After sorting.... :";
	for (auto& e : v1) {
		cout << " " << e;
	}
	cout << endl << endl;

	//2차원 벡터
	//각 행마다 variable length를 갖음

	vector<vector<int>> v3;
	v3.push_back({ 1,2,3 });
	v3.push_back({ 45,32 });
	v3.push_back({ 10,9,8,7 });
	
	cout << v3[0][2] << endl; //3
	cout << v3[2][0] << endl; //10

	v3[2].push_back(999);
	cout << v3[2][4] << endl; //999

	return 0;
}

Comments