영넌 개발로그
[C++ 기초] Vector 본문
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;
}
'코딩 > C++' 카테고리의 다른 글
[SFML] Simple Fast Multimedia Library 설정 / 원 그리기 (0) | 2020.12.03 |
---|---|
[C++ 기초] STL : Standard template library / class array (0) | 2020.10.27 |
[객체 기반 프로그래밍] getter, setter / object as 파라미터, 반환 값 (0) | 2020.10.27 |
[C++ 기초] class overloading / 헤더파일 만들어 쓰기 / access control (public, private) (0) | 2020.10.27 |
Comments