diff --git a/submission/day2/exercise_09.cpp b/submission/day2/exercise_09.cpp new file mode 100644 index 0000000..53dccf9 --- /dev/null +++ b/submission/day2/exercise_09.cpp @@ -0,0 +1,92 @@ +#include +#include +#include + +using namespace std; + +template +class MyVector { +public: + MyVector(const int& temp = 3) { + data = new T[temp]; //data=new int[3] + m_size = 0; + m_capacity = temp; + } + ~MyVector() { + if (data != NULL) { + delete[] data; + } + } + + void push_back(const T& n) { + + if (m_capacity <= m_size) { + m_capacity *= 2; //용량 늘리고 + + T* tmp = new T[m_capacity]; //용량만큼 새 메모리 할당 + for (int i = 0; i < m_size; i++) { + tmp[i] = data[i]; + } + delete[] data; //? 기존 data가 가리키는 부가메모리 해제후 + data = tmp; // tmp가 가리키는 동적 배열 가리키게 + } + //용량 넉넉하면 추가만 + data[m_size] = n; //맨 뒤에 데이터 추가 + m_size++; + } + + void pop_back(/* ... */) { + /* ... */ + m_size = m_size > 0 ? m_size - 1 : 0; + } + + /* return-type */ + T& operator[](size_t i) { /* ... */ + return data[i]; + } + + size_t size() const { + /* ... */ + return m_size; + } + T* begin() { + return data; //시작주소 + } + T* end() { + return data + m_size; // 포인터 주소연산 ,끝 주소(empty) + } +private: + T* data; + size_t m_size; + int m_capacity; + // Define other member variables if necessary +}; + +// Use case +int main() { + + { + MyVector v; + cout <<"초기 사이즈: "<< v.size() << '\n'; + v.push_back(1); // v.size() == 1 + v.push_back(2); // v.size() == 2 + cout<<"1,2 push후 사이즈: "< +#include +#include + +using namespace std; + +template +class MyVector { +public: + MyVector(const int& temp = 3) { + data = new T[temp]; //data=new int[3] + m_size = 0; + m_capacity = temp; + } + ~MyVector() { + if (data != nullptr) { + delete[] data; + } + } + // + MyVector(const MyVector& r) //복사 생성자 + { + data = new T[r.m_capacity]; + m_size=r.m_size; + m_capacity = r.m_capacity; + copy(r.data, r.data + m_size, data); //r.data -> data로 복사 + } + + MyVector(MyVector&&r) noexcept //이동 생성자 + { /* ... */ + m_size = exchange(r.m_size,0); + m_capacity = exchange(r.m_capacity,0); + data = r.data; + + r.data = nullptr; //자신이 가리키고 있던 메모리 해제하지 못하게 + + } + //복사 대입 연산자 + MyVector& operator=(const MyVector& r) { /* ... */ + if (this !=&r) { // Myvector v1(v1); 자기 자신 대입시 실행x + if (m_capacity < r.m_capacity) { + delete[] data; + + m_size = r.m_size; + m_capacity = r.m_capacity; + data= new T[m_capacity]; + + } + for (int i = 0; i < r.m_size; i++) { + data[i] = r[i]; + } + } + + return *this; + } + //이동 대입 연산자 + MyVector& operator=(MyVector&& r) noexcept{ /* ... */ + if (this != &r) { + + delete[] data; + m_size = exchange(r.m_size, 0); + m_capacity = exchange(r.m_capacity, 0); + data = r.data; + + r.data = nullptr; + } + return *this; + } + void push_back(const T& n) { + + if (m_capacity <= m_size) { + m_capacity *= 2; //용량 늘리고 + + T* tmp = new T[m_capacity]; //용량만큼 새 메모리 할당 + for (int i = 0; i < m_size; i++) { + tmp[i] = data[i]; + } + delete[] data; //? 기존 data가 가리키는 부가메모리 해제후 + data = tmp; // tmp가 가리키는 동적 배열 가리키게 + } + //용량 넉넉하면 추가만 + data[m_size] = n; //맨 뒤에 데이터 추가 + m_size++; + } + + void pop_back(/* ... */) { + /* ... */ + m_size = m_size > 0 ? m_size - 1 : 0; + } + + /* return-type */ + T& operator[](size_t i) { /* ... */ + return data[i]; + } + //추가.. const 참조 객체 접근시 + const T& operator[](size_t i) const { + return data[i]; + } + + size_t size() const { + /* ... */ + return m_size; + } + T* begin() { + return data; //시작주소 + } + T* end() { + return data + m_size; // 포인터 주소연산 ,끝 주소(empty) + } +private: + T* data; + size_t m_size; + int m_capacity; + // Define other member variables if necessary +}; + +// Use case +int main() { + + { + MyVector v; + cout <<"초기 사이즈: "<< v.size() << '\n'; + v.push_back(1); // v.size() == 1 + v.push_back(2); // v.size() == 2 + cout<<"1,2 push후 사이즈: "< v2 = std::move(v); //이동생성자 호출 + for (auto i : v2) { + cout << i << ' '; + } + cout<<'\n'; + const auto& vref = v2; + cout</02.cpp b/submission/exercise-<01>/02.cpp new file mode 100644 index 0000000..ea57172 --- /dev/null +++ b/submission/exercise-<01>/02.cpp @@ -0,0 +1,51 @@ +#include +#include +#include +using namespace std; + +vector v; + +int main() { + int i = 10; + + while (i--) { + int k; + cin >> k; + v.push_back(k); + } + int a; + cin >> a; + + //vector::iterator it; + if (find(v.begin(), v.end(), a) != v.end()) { + int idx = find(v.begin(), v.end(), a) - v.begin(); //인덱스 + cout << idx; + } + else { + + int idx = -1; + vector::iterator it= + find_if(v.begin(), v.end(),check(a) ); + + if (it == v.end()) { + cout << idx; + } + else { + for (int i = 0; i < v.size(); i++) { + if (v[i] == *it) + { + idx = i; + break; + } + } + cout << idx; + } + + } + + + + + + return 0; +} diff --git a/submission/exercise-<01>/05.cpp b/submission/exercise-<01>/05.cpp new file mode 100644 index 0000000..8549ac6 --- /dev/null +++ b/submission/exercise-<01>/05.cpp @@ -0,0 +1,44 @@ +#include +#include +#include +#include //해시 map 사용 +using namespace std; + +int main() { + + int n; + cin >> n; + + unordered_map m1; + while (n--) { + int k; + cin >> k; + auto it = m1.find(k); + if (it != m1.end()) { + it->second += 1; + } + else { //못찾음 + m1.emplace(k, 1); + } + } + int m; + cin >> m; + vector B; + while (m--) { + int k; + cin >> k; + B.push_back(k); + } + + for (const auto& x: B) { + auto it = m1.find(x); + if (it != m1.end()) { + cout << it->second << " "; + } + else { + cout << 0<< " "; + } + } + + return 0; +} diff --git a/submission/exercise-<01>/06.cpp b/submission/exercise-<01>/06.cpp new file mode 100644 index 0000000..6886a87 --- /dev/null +++ b/submission/exercise-<01>/06.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#include //해시 map 사용 +#include +using namespace std; + +int main() { + int a, b, N; + cin >> a >> b >> N; + + vector A(N); + vector B(N); + + + iota(A.begin(), A.end(), a); + iota(B.begin(), B.end(), b); + + auto res=inner_product(A.begin(), A.end(), B.begin(), 0); + + cout << res; + return 0; +} diff --git a/submission/exercise-<01>/chanikjeong.cpp b/submission/exercise-<01>/chanikjeong.cpp new file mode 100644 index 0000000..a5dce51 --- /dev/null +++ b/submission/exercise-<01>/chanikjeong.cpp @@ -0,0 +1,33 @@ +#include + +#include +using namespace std; + + +int main() { + + list ls; + int i = 10; + while (i--){ + int k; + cin >> k; + ls.push_back(k); + } + int a, b; + cin >> a >> b; + list::iterator it1, it2; + it1 = it2=ls.begin(); + advance(it1, a); + advance(it2, b); + ls.erase(it1, it2); + + + while (!ls.empty()) { + cout << ls.front()<<" "; + ls.pop_front(); + + } + + + return 0; +}