C++ Template.
1.C++ Template
class Vector { string* data;
int capacity; int length; public: // 생성자 Vector(int n = 1) : data(new string[n]), capacity(n), length(0) { } // 맨 뒤에 새로운 원소를 추가. void push_back(string s) { if (capacity <= length) { string* temp = new string[capacity * 2]; for (int i = 0; i < length; i++) { temp[i] = data[i]; } delete[] data; data = temp; capacity *= 2; } data[length] = s; length++; } // 임의의 위치의 원소에 접근. string operator[] (int i) { return data[i]; } // x 번째 위치한 원소를 제거. void remove(int x) { for (int i = x + 1; i < length; i++) { data[i - 1] = data[i]; } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } };
class Vector { char* data; int capacity; int length; public: // 생성자 Vector(int n = 1) : data(new char[n]), capacity(n), length(0) } // 맨 뒤에 새로운 원소를 추가. void push_back(char s) { if (capacity <= length) { char* temp = new char[capacity * 2]; for (int i = 0; i < length; i++) { temp[i] = data[i]; } delete[] data;
data = temp; capacity *= 2; } data[length] = s; length++; } // 임의의 위치의 원소에 접근. char operator[] (int i) { return data[i]; } // x 번째 위치한 원소를 제거. void remove(int x) { for (int i = x + 1; i < length; i++) { data[i - 1] = data[i]; } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } };
class Vector { T* data; int capacity; int length; public: // 생성자 Vector(int n = 1) : data(new T[n]), capacity(n), length(0) { } // 맨 뒤에 새로운 원소를 추가. void push_back(T s) { if (capacity <= length) { T* temp = new T[capacity * 2]; for (int i = 0; i < length; i++) { temp[i] = data[i]; } delete[] data; data = temp; capacity *= 2; } data[length] = s; length++; } // 임의의 위치의 원소에 접근. T operator[] (int i) { return data[i]; } // x 번째 위치한 원소를 제거. void remove(int x) { for (int i = x + 1; i < length; i++) { data[i - 1] = data[i]; } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } };
// 템플릿 첫 활용 #include
#include using namespace std; template class Vector { T* data; int capacity; int length; public: // 생성자 Vector(int n = 1) : data(new T[n]), capacity(n), length(0) { } // 맨 뒤에 새로운 원소를 추가. void push_back(T s) { if (capacity <= length) { T* temp = new T[capacity * 2]; for (int i = 0; i < length; i++) { temp[i] = data[i]; } delete[] data; data = temp; capacity *= 2; } data[length] = s; length++; } // 임의의 위치의 원소에 접근. T operator[] (int i) { return data[i]; } // x 번째 위치한 원소를 제거. void remove(int x) { for (int i = x + 1; i < length; i++) { data[i - 1] = data[i]; } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } }; int main() { // int 를 보관하는 벡터를 생성. Vector int_vec; int_vec.push_back(3); int_vec.push_back(2); cout << "-------- int vector ----------" << endl; cout << "첫번째 원소 : " << int_vec[0] << endl; cout << "두번째 원소 : " << int_vec[1] << endl; Vector str_vec; str_vec.push_back("hello"); str_vec.push_back("world"); cout << "-------- string vector -------" << endl; cout << "첫번째 원소 : " << str_vec[0] << endl; cout << "두번째 원소 : " << str_vec[1] << endl; }
templateclass Vector { T* data; int capacity; // ...
template
templateclass test { };
templateclass test { };
template<> class test{ };
template <> class Vector{ ... // 원하는 코드 }
#include#include using namespace std; template class Vector { T* data; int capacity; int length; public: // 어떤 타입을 보관하는지 typedef T value_type; // 생성자 Vector(int n = 1) : data(new T[n]), capacity(n), length(0) { } // 맨 뒤에 새로운 원소를 추가한다. void push_back(T s) { if (capacity <= length) { T* temp = new T[capacity * 2]; for (int i = 0; i < length; i++) { temp[i] = data[i]; } delete[] data; data = temp; capacity *= 2; } data[length] = s; length++; } // 임의의 위치의 원소에 접근. T operator[] (int i) { return data[i]; } // x 번째 위치한 원소를 제거. void remove(int x) { for (int i = x + 1; i < length; i++) { data[i - 1] = data[i]; } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } }; template <> class Vector { unsigned int* data; int capacity; int length; public: typedef bool value_type; // 생성자 Vector(int n = 1) : data(new unsigned int[n / 32 + 1]), capacity(n / 32 + 1), length(0) { for (int i = 0; i < capacity; i++) { data[i] = 0; } } // 맨 뒤에 새로운 원소를 추가. void push_back(bool s) { if (capacity * 32 <= length) { unsigned int* temp = new unsigned int[capacity * 2]; for (int i = 0; i < capacity; i++) { temp[i] = data[i]; } for (int i = capacity; i < 2 * capacity; i++) { temp[i] = 0; } delete[] data; data = temp; capacity *= 2; } if (s) { data[length / 32] |= (1 << (length % 32)); } length++; } // 임의의 위치의 원소에 접근. bool operator[] (int i) { return (data[i / 32] & (1 << (i % 32))) != 0; } // x 번째 위치한 원소를 제거한다. void remove(int x) { for (int i = x + 1; i < length; i++) { int prev = i - 1; int curr = i; // 만일 curr 위치에 있는 비트가 1 이라면 // prev 위치에 있는 비트를 1 로 만든다. if (data[curr / 32] & (1 << (curr % 32))) { data[prev / 32] |= (1 << (prev % 32)); } // 아니면 prev 위치에 있는 비트를 0 으로 지운다. else { unsigned int all_ones_except_prev = 0xFFFFFFFF; all_ones_except_prev ^= (1 << (prev % 32)); data[prev / 32] &= all_ones_except_prev; } } length--; } // 현재 벡터의 크기를 구한다. int size() { return length; } ~Vector() { if (data) { delete[] data; } } }; int main() { // int 를 보관하는 벡터를 만든다. Vector int_vec; int_vec.push_back(3); int_vec.push_back(2); cout << "-------- int vector ----------" << endl; cout << "첫번째 원소 : " << int_vec[0] << endl; cout << "두번째 원소 : " << int_vec[1] << endl; Vector str_vec; str_vec.push_back("hello"); str_vec.push_back("world"); cout << "-------- string vector -------" << endl; cout << "첫번째 원소 : " << str_vec[0] << endl; cout << "두번째 원소 : " << str_vec[1] << endl; Vector bool_vec; bool_vec.push_back(true); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(false); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); bool_vec.push_back(false); cout << "-------- bool vector ---------" << endl; or (int i = 0; i < bool_vec.size(); i++) { cout << bool_vec[i]; } cout << endl; }
unsigned int* data;
int capacity;
int length;
if (s) { data[length / 32] |= (1 << (length % 32)); }
// 만일 curr 위치에 있는 비트가 1 이라면
// prev 위치에 있는 비트를 1 로 만든다.
if (data[curr / 32] & (1 << (curr % 32))) {
data[prev / 32] |= (1 << (prev % 32));
}
==========================================================
// 아니면 prev 위치에 있는 비트를 0 으로 지운다.
else {
unsigned int all_ones_except_prev = 0xFFFFFFFF;
all_ones_except_prev ^= (1 << (prev % 32));
data[prev / 32] &= all_ones_except_prev;
}
===========================================================
unsigned int all_ones_except_prev = 0xFFFFFFFF; =====================E
all_ones_except_prev ^= (1 << (prev % 32));
template=======================Q T max(T& a, T& b) { return a > b ? a : b; } =========================== cout << "Max (" << a << "," << b << ") ? : " << max(a, b) << endl; ==============================W =========================== max (a, b) ====================================E =========================== cout << "Max (" << s << "," << t << ") ? : " << max(s, t) << endl; ==============================R
templatevoid bubble_sort(Cont& cont, Comp& comp) { for (int i = 0; i < cont.size(); i++) { for (int j = i + 1; j < cont.size(); j++) { if (!comp(cont[i], cont[j])) { cont.swap(i, j); } } } }
struct Comp1 {
bool operator() (int a, int b) {
return a > b;
}
};
struct Comp2 {
bool operator() (int a, int b) {
return a < b;
}
};
template============================ Q void bubble_sort(Cont& cont) ============================= template =================== W void bubble_sort(Cont& cont, Comp& comp)
template< class RandomIt >================================ Q void sort( RandomIt first, RandomIt last ); ============================================= template< class RandomIt, class Compare > ====================== W void sort( RandomIt first, RandomIt last, Compare comp );
'#Programming Language > C++' 카테고리의 다른 글
C++ About const and static. (0) | 2018.04.02 |
---|---|
C++ Constructors and destructors. (0) | 2018.04.02 |
C++ Creating excel part 2. (0) | 2018.04.02 |
C++ Creating excel part 1. (0) | 2018.04.02 |
C++ I / O in C++ (0) | 2018.04.01 |