(STL) STL 1 (deta structure) (algorithm) (deta structure) 2 STL STL (Standard Template Library) 2.1 STL STL ( ) vector<int> x; for(int i = 0; i < 10; ++i) x.push_back(i); vector STL <> x.push_back(i) STL 2.1 C++( ) Vec3 float class Vec3 private: float x, y, z;... ; 1
double long double template<class Type> class Vec3 private: Type x, y, z;... ; Vec3<double> v; x,y,z double 3 vector STL vector vector vector<double> b; vector<triangle> c; 3 vector List.1 2
List.1 #include <iostream> #include <vector> using namespace std; int main(void) // vector<int> b(5, 1); // vector<int> c(b); // int i, n; cout << "n : " << endl; cin >> n; for(i = 0; i < n; ++i) a.push back(i); for(i = 0; i < n; ++i) cout << "a[" << i << "] = " << a[i] << endl; vector List.1 push_back vector<int> a push_back vector push_back insert new delete vector List.1 n n : 5 a[0] = 0 a[1] = 1 a[2] = 2 a[3] = 3 a[4] = 4 3.1 vector int* pa; 3
int i; for(i = 0; i < 50000; ++i) a.push_back(i); pa = &a[3]; for(i = 50000; i < 100000; ++i) a.push_back(i); cout << *pa << endl; a[3] pa vector vector reserve resize List.2 List.2 capacity size size int t[10]; 10 capacity List.2 push_back 0 a size : 1 capacity : 1 1 a size : 2 capacity : 2 2 a size : 3 capacity : 3 3 a size : 4 capacity : 4 4 a size : 5 capacity : 6 5 a size : 6 capacity : 6 6 a size : 7 capacity : 9 7 a size : 8 capacity : 9 8 a size : 9 capacity : 9 9 a size : 10 capacity : 13 reserve 0 a size : 1 capacity : 10 1 a size : 2 capacity : 10 2 a size : 3 capacity : 10 3 a size : 4 capacity : 10 4 a size : 5 capacity : 10 5 a size : 6 capacity : 10 6 a size : 7 capacity : 10 7 a size : 8 capacity : 10 8 a size : 9 capacity : 10 9 a size : 10 capacity : 10 resize 0 a size : 10 capacity : 10 1 a size : 10 capacity : 10 2 a size : 10 capacity : 10 3 a size : 10 capacity : 10 4 a size : 10 capacity : 10 4
5 a size : 10 capacity : 10 6 a size : 10 capacity : 10 7 a size : 10 capacity : 10 8 a size : 10 capacity : 10 9 a size : 10 capacity : 10 push_back size capacity push_back reserve reserve (reserve: ) 10 reserve(10) reserve push_back resize resize resize vector<int> v; v.resize(10, 0);(int 10 0 ) 5
List.2 #include <iostream> #include <vector> using namespace std; int main(void) int i, n; cout << "n : "; cin >> n; cout << "push back" << endl; for(i = 0; i < n; ++i) a.push back(i); cout << i << " a size : " << (int)a.size(); cout << " capacity : " << (int)a.capacity() << endl; a.clear(); cout << "reserve" << endl; a.reserve(n); for(i = 0; i < n; ++i) a.push back(i); cout << i << " a size : " << (int)a.size(); cout << " capacity : " << (int)a.capacity() << endl; a.clear(); cout << "resize" << endl; a.resize(n); for(i = 0; i < n; ++i) a[i] = i; cout << i << " a size : " << (int)a.size(); cout << " capacity : " << (int)a.capacity() << endl; return 0; 6
3.2 2 1 [] 2 at() at( ) [] [] at() at() out_of_range List.3 try-catch try catch List.3 error : 10 List.3 #include <iostream> #include <vector> using namespace std; int main(void) int i, n; cout << "n : "; cin >> n; a.resize(n); try for(i = 0; i < n+10; ++i) a.at(i) = i; catch(out of range err) cout << "error : " << i; cout << " " << endl; return 0; 7
4 STL 3 ( ) 4.1 vector (container) vector deque( ) list( ) STL vector : deque : list : queue, stack : map : set : 4.2 (iterator, ) * vector list iterator : input_iterator : output_iterator : forward_iterator : bidirectional_iterator : random_access_iterator : const_iterator : const 8
iterator iterator const_iterator List.4 List.4 #include <iostream> #include <vector> using namespace std; int main(void) vector<int>::iterator pa; int i, n; cout << "n : "; cin >> n; a.resize(n); // // pa = a.begin(); i = 0; while(pa!= a.end()) pa = i; pa++; i++; // for(pa = a.begin(); pa!= a.end(); ++pa) cout << pa << " "; return 0; begin() end() 1 while(pa!= a.end()) ( end()-1 ) n : 5 0 1 2 3 4 4.3 (algorithm) sort List.5 9
n : 10 0 56 19 80 58 47 35 89 82 74 0 19 35 47 56 58 74 80 82 89 10
List.5 #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; // inline int nrand(int n) return (int)(rand()/(1.0f+rand MAX) n); int main(void) vector<int>::iterator pa; int i, n; cout << "n : "; cin >> n; // // // a.resize(n); for(i = 0; i < n; ++i) a[i] = nrand(100); for(pa = a.begin(); pa!= a.end(); ++pa) cout << pa << " "; cout << endl; // sort(a.begin(), a.end()); for(pa = a.begin(); pa!= a.end(); ++pa) cout << pa << " "; cout << endl; return 0; 11