컴공 일기262
게시글 주소: https://w.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를 선물하세요.
-
오르비 바이바이인거야 10
난 2분뒤에 새로 태어날거야
-
손 ㅇㅈ 16
후아 열심히 연습해따
-
구마유시 도란의 쓰레쉬에 감동받아서 사슬게임도 해줄수있다 발언
-
아니 진지하게 쓸 글이 없음 이제 ㅇㅇ
-
버거킹 새우버거
-
살려만 다오
-
다음주부터 2
공스타 만들어서 오르비랑 인스타에 오늘 한 공부 올린다 일요일빼고 하루도 빠짐없이...
-
헤헤.. 제곧내.. 중딩때도 안해서 모고 잘 찍으면 6 못찍으면 7-8나와욬ㅋㅋㅠ...
-
ㅠ
-
4칸붙을것같은데 2
이유는없음걍기분이그럼
-
네 뭐.. 열심히 하세요
-
내일부터 갓생 1일차 시작합니다 1시에 자서 8시 기상 얼버기인증 시작
-
걍 슈프림인가요
-
4년전 여름이었음... 그때 이후로 딱히 연락 안 했는데 유명 대학병원 간호사 됐다카더라구요
-
진학사 실지원이랑 다르게 지원하는사람 많나요?
-
현우진 진짜 하나도 안들어봄
-
남은 40명만 내 밑이면 합격하는건데
-
사문이랑 할 과목 못정했는데 박상영t 정법이 그렇게 좋다는데 정법 괜찮을까요
-
고등학교 1학년 내신을 망쳤지만 일단은 내신을 하려고 하는데 겨울방학 때 어떤...
-
하루 10시간 + @을 공부한거지 지금 걍 10분도 집중 못하겟는데
-
국어 6 9모 4등급이었는데 수능때 6등급이 나온 사람인데.. 고2마더텅을 해야할까요..
-
ㄱㄱ잇
-
점공 1명들어올떄마다 숨막힘>내위표본이다>절망 >내 아래>행복
-
수특표지보니까 3
내년도 물수능이네요 다들 성불하실듯 ㅋㅋㅋㅋㅋ 표지오ㅑㄹ케 병맛스러운게 많지 ㅋㅋㅋ
-
05인데 현역으로 대학입학 후 1년 다니고 다음년도 휴학하고 수능볼 예정인사람.. 있나요?
-
4명에 대해 써야 하는데 아직도 1명에 대해 쓰고 있는 ㅜㅜㅜ
-
중약 vs 건글의 12
어디가실거임 님들 중약 vs 건글의 나 급함 의견좀 ㅈㅂ
-
진학사 점공에서 ‘원서접수자 중 나의 등수 x명/y명’의 y명은 점공한 사람 수 아니에요?
-
전 일단 무슨 일이 있어도 한번 시작했으면 두시간은 가고 +a인듯 그리고 쉴때는...
-
현시점 협곡 0
원딜 - 구마유시 서폿 - 도란 방금 구마유시가 칭찬함 도란이 빨리 평가 하라니까...
-
시대인재 재종 수업료 0원으로 들어가면 나머지 급식비나 교재비 등등으로 한달에 대략...
-
왜 이번 26 수특 디자인은 양반처럼 보이는 걸까 19
이게 26수특 표지 나머지 후보들 이러니까 1번이 괜찮아 보이지 ㅋㅋㅋ 솔직히...
-
와 이건 충격인데
-
문제는 휴일도 빨리가버림 아니 얘네는 ×3으로 더 빨리가는듯
-
공통킬러기출 공부하려는데 이미지 한번도 안 들어봄
-
확통하세요 8
확통은 신입니다 단기간에 성적을 크게 향상시키고자 한다면 확통입니다
-
평일에 매일 7시에 안양역에서 출발해서 노량진에서 내릴러면 힘들까? 그리고 저녁...
-
다들힘ㅁ내봐요...
-
에반데 메인글 보낸 영향인가
-
3개 햇갈렸는데 님들은 수특 영듣 꼭 푸셈뇨....
-
아 진짜 오늘 뭐했냐 10
공부 5시간도 안한듯 지금도 패드로 오징어게임 들어가는 만화 그리다가 현타와서 그만둠
-
난 일본어 못한다고
-
ㄹㅇ 당황해서 그냥 멍때리고 있었음…. 입결보면 안다는데 어느입결을 보신건지… 라인...
-
다들잘자요 1
저도 잘고에용
-
언젠가요?
-
6시 30분 기상 7시 ~ 8시 영단어 + 국어 어휘 + 당일 플래너 8시 ~ 8시...
-
걍 잠이나 잘까
씨쁠 하시는줄 알았는데 이건 그냥 씨네요?
예? 아닙니다. 실행 쪽 코드에서는 다분히 C라고 느껴지실 수 있겠지만
위에서 살펴볼 수 있듯이 “dynamic_arr.h”라는 사용자 라이브러리를 부르고 있죠. dynamic_array라는 객체를 생성한 겁니다. 당연히 라이브러리는 C++을 이용했구요 :)
아하.. 잘 모르고 말씀드렸네요;;
어려워..
갠적으로 cpp를 주력으로 쓰는거면 STL은 구현해보는 것도 좋은거같음 이런식으로
동의하는 바입니다. 원래 사실, framework이라는 게 기본적으로 “가져다 쓰기만 하면 된다”는 생각이 기저에 깔리다 보니 너무 쉽게 생각하는 측면도 없지 않아 있습니다. 그렇다고 해서 1부터 100까지 모든 걸 다 개발할 줄 알아야 한다는 건 아니지만, framework의 기본적 구조와 메커니즘을 알아야, 그 위에 잘 올라탈 수가 있다고 생각해요. 또한, 그 프레임워크 위에서 해야 될 짓과 하지 말아야 할 짓을 구분해야 하는데… 이걸 구분하기 위해선 일정수준의 구조적 이해와 흐름은 당연히 알고 있어야 한다고도 봅니다.
그쵸 ‘하지 말아야 할 것’ 그리고 구조를 알아야하는 이게 중요한거같습니다 ㅋㅋㅋ 다른 자료구조는 학습하면서 적당히 익혀지지만 cpp의 벡터나 java의 컬렉션같은 것들은 직접 구현을 해보면 진짜 좋죠 ㅋ