컴공 일기262
게시글 주소: https://m.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를 선물하세요.
-
3월 국어 언매 김승리의 선택 독서 독해분석 문학 올오카 수학 공통 작년 아이디어...
-
마지막 ㅇㅈ 0
-
인스타 0
실계로 맞팔하실 분 있나 예전엔 디게 활발했는데 오르비에서 인스타 교환 ㅋㅋㅋ
-
근데 또 자격지심도 느껴지고... 그런 나 자신이 너무 추하게 느껴지는거 같아요
-
하 0
잠 다 잤네
-
이쁜 분이 너무 많네요
-
할 수 있는 게 커플 인증밖에 없네
-
저렙노프사나 조용한 고닉들이 얌전한 고양이 부뚜막 먼저 올라가듯 함
-
언제잘까
-
ㅇㅈ 보고 있는데 왜 10
다들 존잘 존예인거임 하
-
야식 먹었구나 나..
-
면접떨을 감수할 만큼? 설의는 확실히 대우가 다른데 연의 카의도 그 정도 차이인가?
-
ㅇㅈ 7
펑
-
도용이 한명쯤은 있겠지라는 생각 ㅈㅅ
-
ㅇㅈ 30초만 함 19
풉
-
인증 8ㅅ8 9
04노인은 슬슬 자러가야겟어용 zz 여르비? 여자오르비?... 뭐라 부르는진...
-
수능 보기 3주 전에 할아버지 돌아가시고 수능 보기 2주 전에 우리집 강아지 무지개 건넘
-
ㅎ.ㅎ
-
공대생중에 0
cpa 준비하는 분들 계시나요? 보통 언제쯤 시작하는지 궁금해요
-
하ㅅㅂ잘못셌나봄 4
가군은 문닫고 들어가거나 문앞에서 막히거나 둘중 하나일듯 다시 똥줄 on
-
2026 수능대비 기시감 구매했는데 제공하는 복습 PDF는 2025...
-
고3 현역 당시 본 수능 성적... 6월 9월에 비하면 커리어로우는 맞지만, 지금...
-
ㅇㅈ 4
. . 궁금함?
-
ㄹㅈㄷㄱㅁ 댓글이 아니라 댓글 수를 보면 됨
-
동국대, 홍익대 어디가 더 나을까요 아니면 반수..?
-
ㅇㅈ 12
전에 동네 뒷산 올라가서 찍은 사진 ㅇㅈ 공부 너무 안된날에 한번 기분 환기하러...
-
캠퍼스가 예쁘다고 하길래 가보고 싶기는 한데 흠…
-
ㅇㅈ 2
이거나드셔
-
ㅇㅈ 11
ㅋ
-
다들 굿밤! 5
-
거즘 한 9년째 들락날락중
-
ㅇㅈ 7
..마지막입니다...
-
인성테스트문제 작년에 수완풀다가 웃겨서 찍어놨던거 ㅋㅋ
-
술을마셔야해 5
그래야오르비에병1슨같은글을써도술먹고지랄이군정도로이해받을수있어
-
로스쿨을 간다는 가정하에서만 성립임??
-
웨 ㅇㅈ 메타죠 3
...
-
헤 5
.멀뚱.
-
으하하하
-
질받 18
선넘질도 환영 뭐든 답해드림 심심해여
-
눈만 ㅇㅈ 12
폰바꾸고 백업을 안 했더니 옛날사진밖에 없네
-
제발투표좀 0
편입할건데 2년제 가서 바로 취업 준비 단점은 일 그만둘시 전문대 타이틀때메 타직종...
-
나도 언젠간 저격먹겟지 11
그 전에 다른 커뮤를 물색해놔야겟다..
-
ㅇㅈ할까 2
고딩때 사진으로 해도되나여
-
간호대 1
내 인생 가장 후회되는게 간호온거.. 이제 3학년 올라가면 실습해야하는데 자신없고 무섭다ㅜㅜㅜ
-
휴 6
아직 점공 다 들어온 건 아닌데 친구 3칸 성공시킨 듯 제발 이대로만 가자 비싼 거...
씨쁠 하시는줄 알았는데 이건 그냥 씨네요?
예? 아닙니다. 실행 쪽 코드에서는 다분히 C라고 느껴지실 수 있겠지만
위에서 살펴볼 수 있듯이 “dynamic_arr.h”라는 사용자 라이브러리를 부르고 있죠. dynamic_array라는 객체를 생성한 겁니다. 당연히 라이브러리는 C++을 이용했구요 :)
아하.. 잘 모르고 말씀드렸네요;;
어려워..
갠적으로 cpp를 주력으로 쓰는거면 STL은 구현해보는 것도 좋은거같음 이런식으로
동의하는 바입니다. 원래 사실, framework이라는 게 기본적으로 “가져다 쓰기만 하면 된다”는 생각이 기저에 깔리다 보니 너무 쉽게 생각하는 측면도 없지 않아 있습니다. 그렇다고 해서 1부터 100까지 모든 걸 다 개발할 줄 알아야 한다는 건 아니지만, framework의 기본적 구조와 메커니즘을 알아야, 그 위에 잘 올라탈 수가 있다고 생각해요. 또한, 그 프레임워크 위에서 해야 될 짓과 하지 말아야 할 짓을 구분해야 하는데… 이걸 구분하기 위해선 일정수준의 구조적 이해와 흐름은 당연히 알고 있어야 한다고도 봅니다.
그쵸 ‘하지 말아야 할 것’ 그리고 구조를 알아야하는 이게 중요한거같습니다 ㅋㅋㅋ 다른 자료구조는 학습하면서 적당히 익혀지지만 cpp의 벡터나 java의 컬렉션같은 것들은 직접 구현을 해보면 진짜 좋죠 ㅋ