컴공 일기262
게시글 주소: https://orbi.kr/00070997040

엊그제 새벽 즈음 했던 동적배열을 조금 더 만져서 값 초기화까지 되게 구현했네요..
임시객체로 오는 이슈까지 이동시맨틱으로 붙잡고, 배열 덧셈 또한 가능합니다.
꽤 쓸만한 배열이 되겠군요…는 개뿔
std::vector나 std::array에 이미 있는 기능입니다.
“dynamic_arr.h”
#pragma once
#include <iostream>
using namespace std;
class dynamic_array
{
public:
dynamic_array() = default;
explicit dynamic_array(int n);
dynamic_array(const dynamic_array&);
dynamic_array(dynamic_array&&) noexcept;
int* begin() const;
int* end() const;
const int getSize() const;
void PrintData() const;
int operator[] (const int index) const;
int& operator[] (const int index);
dynamic_array operator+(const dynamic_array&);
dynamic_array& operator=(const dynamic_array&);
dynamic_array& operator=(dynamic_array&&) noexcept;
~dynamic_array();
private:
int* data = nullptr;
int size = 0;
};
dynamic_array::dynamic_array(int n)
{
cout << "dynamic_array(int)" << endl;
data = new int[n];
size = n;
}
dynamic_array::dynamic_array(const dynamic_array& rhs)
{
cout << "dynamic_array(const dynamic_array&)" << endl;
this->size = rhs.getSize();
data = new int[size];
for(int i=0; i<size; i++)
{
data[i] = rhs[i];
}
}
dynamic_array::dynamic_array(dynamic_array&& rhs) noexcept
{
cout << "dynamic_array(dynamic_array&&)" << endl;
//의도적인 shallow copy
this->data = rhs.data;
this->size = rhs.getSize();
rhs.data = nullptr;
rhs.size = 0;
}
dynamic_array::~dynamic_array()
{
delete[] data;
}
int* dynamic_array::begin() const
{
return data;
}
int* dynamic_array::end() const
{
return data+size;
}
const int dynamic_array::getSize() const
{
return size;
}
void dynamic_array::PrintData() const
{
for(int i=0; i<this->getSize(); i++)
{
cout << this->data[i] << " ";
}
cout << endl;
}
int dynamic_array::operator[](const int index) const
{
if(index < 0 || index >= this->getSize())
{
cout << "Invalid Index!!" << endl;
exit(-1);
}
return this->data[index];
}
int& dynamic_array::operator[](const int index)
{
if(index < 0 || index >= this->getSize())
{
cout << "Invalid Index!!" << endl;
exit(-1);
}
return data[index];
}
dynamic_array dynamic_array::operator+(const dynamic_array& rhs)
{
dynamic_array retVal(this->getSize() + rhs.getSize());
copy(this->begin(), this->end(), retVal.begin());
copy(rhs.begin(), rhs.end(), retVal.begin() + this->getSize());
return std::move(retVal);
}
dynamic_array& dynamic_array::operator=(const dynamic_array& rhs)
{
cout << "dynamic_array::operator=(dynamic_array&)" << endl;
if(data != nullptr)
delete[] data;
data = new int[rhs.getSize()];
for(int i=0; i<rhs.getSize(); i++)
{
data[i] = rhs[i];
}
size = rhs.getSize();
return *this;
}
dynamic_array& dynamic_array::operator=(dynamic_array&& rhs) noexcept
{
cout << "dynamic_array::operator=(dynamic_array&&)" << endl;
if (this != &rhs) { // 자기 대입 방지
if (data != nullptr) {
delete[] data;
}
data = rhs.data;
size = rhs.size;
rhs.data = nullptr;
rhs.size = 0;
}
return *this;
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
이제 노베들한테 어짜피 못 풀 어려운 지문 버리고 가라고 하자늠.. 그런데 그...
-
경북치가 좋음? 0
경북치는 솔직히.. 개좋아요 사랑합니다 작년에 지역인재 교과 1.58도 합격하던데...
-
하재호님이 실패하신 이유가 1년밖에 안해서라는데 사실 맞는 말임 2
최소 3년간 공부한 결과물하고 1년 공부한 결과물은 물리적으로 봐도 같을 수가...
-
전 후자가 어렵던디
-
점점 애정이 사라지고 있긴 해
-
아 머리가 띵 2
알코올에 절여졌다
-
첫지문 날개 캬...
-
오랜만에 질받 29
아무거나 ㄱㄴ
-
귀류 없이 풀려고 하다 보면 막히는거 30분씩 걸리는데 이래도 괜찮은가요?
-
화생으로대학가기
-
현존하는 기출 논리를 넘은 출제가 안된지 벌써 5년째임 내신공부법으로 8맞이 이론상...
-
초4때 학원에서 개념 빈칸채우는 시험보는데 항등식을 항정식이라 써서 배고프냐고 조리돌림당함
-
14 22 빼고 어려운거없지않나 25 - 14 15 20 21 22 23 - 12...
-
취르비 7
힘들군
-
배고픔
-
취르비입갤 1
헤롱헤롱
-
지금 정신상태가 말이 아니구려 학교를 가야할 게 아니라 정신과 가서 항불안제 받아야 할 판임
-
면라이더
-
에휴
-
개념만 보고 올수27 혼자 푼거면 충분히 미적 해볼만한가요 7
파운데이션듣고 30분가까이 혼자 끙끙앓으면서 푼거긴한데…..문제가 저랑 잘...
-
우리 러셀 진짜 예쁜 분이 하나도 없음... 나 눈 높은 편도 아닌데 진짜 어찌...
-
16 34네 0
나중에 다시 풀때 참고해야겠다
-
흠 탈릅할까 11
흠....
-
a4가 a5의 제곱일 때 성립하므로 1 1 1 1 1 1 3 9 3 9 3 9 69...
-
내가 물리과외할때 물1 만백 97 물2 만백 94찍히고 과외가 싹 끊김 그리고...
-
경재공부 조금만 하면 쉽게 읽을수잇는데
-
맨날 중국인들 나와서 개소리하는거 지겨움..
-
고1 자작문제 4
풀어줘잉
-
기술이었나 기억이 안나
-
그립군아
-
아까 매월승리 병행해야되는지 질문한 국어 5등급정도인 사람입니다 강의랑 같이...
-
06 진짜 아무도 없는줄 알았는데…
-
Internal Server Error가 사라졌어
-
작수 독서 지문 써놓은거보면 신기한 시도가 보이긴함 7
이런 글쓰기 방식을 또 채택할지는 모르겠지만 ㅋㅋㅋ 개화 지문 기적의 오답률로 헤겔 발라버림
-
07 짓밟아야지
-
몇 지문 정도 할 수 있을까요
-
06들아 4
군대가야지
-
무등비 11문제
-
지질 않네 나 같은 중졸 잼민이 데리고도
-
작년 11덮 물2가 1컷 50에 3등급까지 블랭크였나 그랬는데(난이도는 25수능과...
-
현역들을 지옥으로 인도해라. 수능은 TEAM 삼수생이 끝장낸다.
-
아니 진짜 9
제발 잘자세요 좋은 꿈 좀 꾸시고요 내일도 힘내세요 저먼저 잘게요
-
이제 다가오는 3모 기념해서 풀어봄
-
노베 고3의 예측불가 수능 도전
-
17 보험 18 오버슈팅 19 구껍질 20 BIS비율 21 모델링과 랜더링 22...
-
1월달에 첨할때 너무 재밌어서 하루에 10시간씩 기출 풀고 밥먹는시간에도 문제...
-
그런 건 깔끔히 포기하기로 했다 뭐 정확히는 저 지역의 인스타 핫플.. 같은 곳을 가는 걸..
-
차의함수 오류 2
제가 구한 차의함수를 이용해서 f프라임값을 구하면 설정한 값과 다르게 나오는데 어떤...
씨쁠 하시는줄 알았는데 이건 그냥 씨네요?
예? 아닙니다. 실행 쪽 코드에서는 다분히 C라고 느껴지실 수 있겠지만
위에서 살펴볼 수 있듯이 “dynamic_arr.h”라는 사용자 라이브러리를 부르고 있죠. dynamic_array라는 객체를 생성한 겁니다. 당연히 라이브러리는 C++을 이용했구요 :)
아하.. 잘 모르고 말씀드렸네요;;
어려워..
갠적으로 cpp를 주력으로 쓰는거면 STL은 구현해보는 것도 좋은거같음 이런식으로
동의하는 바입니다. 원래 사실, framework이라는 게 기본적으로 “가져다 쓰기만 하면 된다”는 생각이 기저에 깔리다 보니 너무 쉽게 생각하는 측면도 없지 않아 있습니다. 그렇다고 해서 1부터 100까지 모든 걸 다 개발할 줄 알아야 한다는 건 아니지만, framework의 기본적 구조와 메커니즘을 알아야, 그 위에 잘 올라탈 수가 있다고 생각해요. 또한, 그 프레임워크 위에서 해야 될 짓과 하지 말아야 할 짓을 구분해야 하는데… 이걸 구분하기 위해선 일정수준의 구조적 이해와 흐름은 당연히 알고 있어야 한다고도 봅니다.
그쵸 ‘하지 말아야 할 것’ 그리고 구조를 알아야하는 이게 중요한거같습니다 ㅋㅋㅋ 다른 자료구조는 학습하면서 적당히 익혀지지만 cpp의 벡터나 java의 컬렉션같은 것들은 직접 구현을 해보면 진짜 좋죠 ㅋ