[C++ Programming] Chapters 4 : Vector
🏫Chapters 4 : Computation
📖Vector
-
size()
: 자기 자신의 크기를 가지고 있는 함수, 일단 포인터로 배열을 가지고 있다가 새로운 배열을 가지게 되면 갈아타기 위해 포인터를 가지고 있음 -
Template 템플릿 : 어떤 클래스를 만들 때, 어떤 데이터 타입을 지원할지에 따라 클래스가 별도로 있어야 한다. 그러나, 이는 바람직하지 않으므로 하나로 쓰고 싶지만 지원하는 자료형은 달라야하므로 템플릿을 사용한다.
vector<T>
에서 T에 다양한 타입을 집어넣을 수 있다. 그 타입에 대한 벡터가 자동으로 생성된다.
📖Vectors
-
vector<int> v;
: 빈 벡터 -
v.push_back()
:.
은 v의 멤버 변수를 호출한다. 이때 v가 포인터이면->
를 사용한다.
-
예제 1
// compute mean (average) and median temperatures: int main() { vector<double> temps; // temperatures in Fahrenheit, e.g. 64.6 double temp; while (cin>>temp) temps.push_back(temp); // read and put into vector double sum = 0; for (int i = 0; i< temps.size(); ++i) sum += temps[i]; // sums temperatures cout << "Mean temperature: " << sum/temps.size() << '\n'; sort(temps); // from std_lib_facilities.h // or sort(temps.begin(), temps.end()); cout << "Median temperature: " << temps[temps.size()/2] << '\n';
-
배열과 달리 벡터는 얼마든지 내용이 들어올때마다
push_back
할 수 있다. -
연산자 오버로딩을 통해
[ ]
를 똑같이 쓸 수 있다. -
sort()
C++이 기본으로 제공해주는 함수이다. 원래 제대로 된 문법은sort(temps.begin(), temps.end());
이다.
-
📖Traversing a vector
-
리스트로 벡터를 초기화 해줄 수 있다.
-
for (int i = 0; i< v.size(); ++i) cout << v[i] << '\n';
는 클래식한 방법이고 같은 일을 수행하도록for (int i : v) cout << x << '\n';
도 쓸 수 있다. -
예제 2
#include<vector> #include<string> #include<algorithm> // sort()함수를 가지고 있음 using namespace std; int main(){ vector<string> words; // string 가능 for (string s; cin>>s && s != "quit";) // && means AND words.push_back(s); sort(words); // sort the words we read for (string s : words) // for(int i = 0; i < words.size(); i++) 이것과 같음 cout << s << '\n'; }
-
예제 3 중복된 문자열은 한번만 출력하고 싶을 때
#include<vector> #include<string> #include<algorithm> using namespace std; int main(){ vector<string> words; for (string s; cin>>s && s!= "quit"; ) words.push_back(s); sort(words); vector<string>w2; if (0<words.size()) { // note style { } w2.push_back(words[0]); for (int i=1; i<words.size(); ++i) // note: not a range-for if(words[i-1]!=words[i]) w2.push_back(words[i]); } cout<< "found " << words.size()-w2.size() << " duplicates\n"; for (string s : w2) cout << s << "\n"; }
- 새로운 벡터를 하나 더 만들어 사용하는 방법을 사용한다. 입력받은 벡터를 정렬해준 뒤, 새로운 벡터에 첫번째 문자부터 넣어준다. 이 때, push_back되는 문자열이 그 전 문자열과 같지 않을 때만 수행한다. 이렇게 되면 새로 만든 벡터에는 중복되는 문자열이 없게 된다.
💻실습2
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool solution(vector<int> arr)
{
vector<int> count;
for(int i=0; i < arr.size(); i++)
count.push_back(0);
for (int i = 0; i < arr.size(); i++) {
if (arr[i] <= count.size()) {
count[arr[i]-1]++;
}
}
for (int i = 0; i < arr.size(); i++){
if(count[i] != 1){
return false;
}
}
return true;
}