컴공 일기237
게시글 주소: https://orbi.kr/00066109820

예… 이제 C++로 언어를 바꿨습니다.
사실, C로 자료구조를 만드는 것과 방식이 약간(어쩌면 아주 많이)다릅니다.
객체지향의 세계관으로 들어오는 순간, class와 탬플릿이 나타나기 시작하죠. 어떻게 보면 객체지향으로 들어오는 순간 개발자 관점과 사용자 관점을 분리해서 생각해야 되는 것 같습니다.
자료구조는 원형 더블링크드리스트인데, iterator로 출력을 하기 위해서나 / 삭제 로직을 비교적 쉽게 구현하기 위해서나 dummy 노드(처음 순서에 들어가는 이름없는 노드)를 생성하자는 것이 리스트의 결론이죠.
뭔가 링크드 리스트로 효율을 생각하는 순간 “더미 노드”를 만들자!로 의견이 모인달까요.
아, 군대에 있는 관계로 코딩은 아이패드로 진행하고 있습니다.
// Created on iPad.
#include <iostream>
using namespace std;
template <typename T>
struct cir_list_node
{
T* data;
cir_list_node* next;
cir_list_node* prev;
~cir_list_node()
{
delete data;
}
};
template <typename T>
struct cir_list
{
public:
using node = cir_list_node<T>;
using node_ptr = node*;
private:
node_ptr head;
size_t n;
public:
cir_list() : n(0)
{
head = new node{NULL, NULL, NULL};
head->next = head;
head->prev = head;
}
size_t size() const
{
return n;
}
void insert(const T& value)
{
node_ptr newNode = new node{new T(value), NULL, NULL};
n++;
auto dummy = head->prev;
dummy->next = newNode;
newNode->prev = dummy;
//원형 리스트에 원소의 개수가 0인 경우
if(head == dummy)
{
dummy->prev = newNode;
newNode->next = dummy;
head = newNode;
return;
}
newNode->next = head;
head->prev = newNode;
head = newNode;
}
void erase(const T& value)
{
auto cur = head, dummy = head->prev;
while(cur != dummy)
{
if(*(cur->data) == value)
{
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
if(cur == head)
head = head->next;
delete cur;
n--;
return;
}
cur = cur->next;
}
}
struct cir_list_it
{
private:
node_ptr ptr;
public:
cir_list_it(node_ptr p) : ptr(p) {}
T& operator*()
{
return *(ptr->data);
}
node_ptr get()
{
return ptr;
}
cir_list_it& operator++()
{
ptr=ptr->next;
return *this;
}
cir_list_it operator++(int)
{
cir_list_it it = *this;
++(*this);
return it;
}
cir_list_it& operator--()
{
ptr = ptr->next;
return *this;
}
cir_list_it operator--(int)
{
cir_list_it it = *this;
--(*this);
return it;
}
friend bool operator==(const cir_list_it& it1, const cir_list_it& it2)
{
return it1.ptr == it2.ptr;
}
friend bool operator!=(const cir_list_it& it1, const cir_list_it& it2)
{
return it1.ptr != it2.ptr;
}
};
cir_list_it begin()
{
return cir_list_it{head};
}
cir_list_it begin() const
{
return cir_list_it{head};
}
cir_list_it end()
{
return cir_list_it{head->prev};
}
cir_list_it end() const
{
return cir_list_it{head->prev};
}
cir_list(const cir_list<T>& other) : cir_list()
{
//아래 코드는 원소를 역순으로 삽입하지만,
//원형 연결리스트이므로 상관없다.
for(const auto& i : other)
insert(i);
}
cir_list(const std::initializer_list<T>& il) : head(NULL), n(0)
{
for(const auto& i : il)
insert(i);
}
~cir_list()
{
while(size())
{
erase(*(head->data));
}
delete head;
}
};
struct playlist
{
cir_list<string> list;
void insert(const string song)
{
list.insert(song);
}
void erase(const string song)
{
list.erase(song);
}
void loopOnce()
{
for(auto& song : list)
cout << song << endl;
cout << endl;
}
};
int main() {
playlist mp3;
mp3.insert("Re:plus - Pulse");
mp3.insert("Kebee - 고3후기");
mp3.insert("Soul company - 천국에도 그림자는 진다");
cout << "재생목록: " << endl;
mp3.loopOnce();
playlist Youtube_Premium = mp3;
Youtube_Premium.insert("Don-Malik - 전염");
Youtube_Premium.insert("LeellaMarz - Trip");
cout << "유튜브 오프라인 재생목록" << endl;
Youtube_Premium.loopOnce();
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
丸い緑の山手線?♻️ 1 0
真ん中通るは中央線~
-
3일간 아파서 0 0
공부를 뒤지게 못했는데 무리하게 쫓아가려곤 하지 말고 잘 해봐야겟음
-
민준이 공부해 0 2
ㄱ
-
ㄴ희대의 개병신이면 공부하러감 1 1
ㅇ
-
특이점이 왔다. 1 0
깨달았다. 수1을. 생각하고 문제를 푸니까 잘 풀리네.
-
자꾸삼칠한테옯창이라하면ㄴ 5 1
탈릅할거야아아앍!!!!!!! 흥
-
꿈에서 2 0
2020년부터 설표같은 08 고닉들이 시대인재에서 오르비하는 꿈을 꿈
-
수열 자작문제 1 2
22번 수열 트렌드에 맞춘 수열 문제입니다
-
분명 1시에 잤는데 0 0
11시에 일어났어
-
지금 일어남 2 1
ㅁㅌㅊ
-
국정원 범작가 문학 1 0
범작가 학원 수강생인데 어제 올라온 영상보고 너무 혼란옴ㅠㅠ 독서는 조금...
-
맛점하세용가리 5 2
-
9모 목표 2 0
국어 100 수학 97 영어 1 탐구 1컷만,,, 국사는 0점 도전
-
지1을 등한시 한것 같음 1 0
얼른 해야 되겠음
-
9모 목표 0 0
국어 2 수학 백분위 99 영어 3 탐구 1컷 언제나 목표는 높게!
-
독서가 좀 쉬웠던거같아서..
-
스테이크 먹고 싶다 1 0
주변에 맛있는 스테이크 집 있긴한데 양이 ㅈ만해서 안 가고 아웃백은 너무 비쌈
-
맛점 하세요 점심인증 8 1
마라탕 맛점
-
7월 전대실모 국어 1 0
6평 91점이었는데 이번에 솔직히 엄청 쉽다고 느끼진 않았어요. 화작에 2번이...
-
9모 목표 6 2
99 99 1 1 99 100 6모랑 비슷한 성적을 받아내겠어요
-
옯창 1위 3 0
-
다상다독 1 0
강의 언제쯤 올라오는지 아시는분 ㅜ 방금 풀었는데 혼자 오답 할까요?
-
여기 여자가 거의 없겠지만 헬스터디 이채연 첫화랑 지금보면 얼굴이 다르던데 살...
-
스카 살 돈도 없어서 집에서 해야함 이거 어케 안걸리고 함?
-
아 니코틴 펀치가 온다 0 1
으아아ㅏ
-
두각 ㅇ 정병호 정병훈 호형훈제 스러너 투표 물2 강k 수학 7모 서울대 반수...
-
난 원피스 보지도 않았는데 1 0
이무가 어떤새기인지 다 스포당하고 있네...
-
믿고 새 애인 사귀니까 그냥 마음속에 두명 있는 사람이 되...
-
설맞이 시즌2 0 0
설맞이 시즌1 다 풀고 시즌2 수2 풀고 있는데 같은 맥시멈이어도 시즌2 맥시멈이...
-
ㅁㅁㄱ 27 0
어딘가에서 쟀음
-
카페인 알약 직구함 21 1
커피도 안 조아하고 에너지 음료 탄산도 안 조아해서 3일 만에 옴
-
수능날에 국어 백분위 70만 뜨고 싶은데 뭐해야함? 1 0
글 읽는 속도가 ㅈㄴ느려서 화작,문학,독서론 아슬아슬하게 80분 걸림ㅋㅋㅋ 지금...
-
국어 0 0
고123모의고사 다 합쳐서 아직 2등급없는데 맨날 서바못봐서 독해력에 문제있다고...
-
범 내려온다~ 0 0
배은망덕 GOAT
-
7덮 국어 매체 풀 때 0 0
아스타잔틴 나와서봇치더락이 계속 머릿속에서 멤돌앗엇슨
-
수업료받았다 11 0
오예오예오옝ㅎ예기분좋아
-
11시에 11 0
책 펴야지
-
시대 6모 편입 0 0
기숙 컷이 어느정도인가요?? 평백96인데 ㅠ 강대의대관도 연락 안오네요…
-
한국교육계가멍청한탓일까
-
아니뭐야 3 1
얼굴 따가워서 건조한건줄알고 미스트 뿌리고 봣더니 긁혀있는대 개크게ㅜㅜ
-
현대소설은 사실상 비연계다보니까 처음보는 걸 푸는 연습을 하려고하는데요 교육청으로...
-
아 뭐야 3 1
비연계가 아니라 내가 수완을 안 푼거였어? 헉
-
이감 5-2 후기 1 0
점수: 88(12 16 21 25 27) 체감난이도: 독서-중상 언매-중 문학-중상...
-
황인범 포르투 이적 하는듯 0 0
포르투는 좋은 팀인데 그래도 빅리그 가서 뛰는거 보고 싶었는데 아쉽다
-
중요 공지 6 15
여태 업로드했던 칼럼은 다음주 중 일괄적으로 내리려 합니다 그간 도움이 되셨던...
-
다상다독 풀어본 사람 있나요? 1 0
문제 어떤거 같나요? 이감, 상상보다 괜찮은지요? (물론 개인 의견인거 감안하고...
-
맨날 매체 틀리면 어뜨캄? 6 0
3덮 빼고 지금까지 4덮5덮6평7월전대실모 싹다 매체 1개이상 틀림 일단 오르비로...
-
국어실모 87점 1 0
독-8 문-3 언-2 독서 보기 2개 날렸고 2점 틀린건 정답률이 20%대 문학...
-
ㅇㅂ에도 없음…
-
아르카같은 여동생이 갖고싶군아 11 0

글 잘 보고 있습니다! 혹시 아이패드로 코딩하기 좋은 앱 추천해주실 수 있을까요
저는 지금, CodeApp인가요? 유료 버젼 쓰고 있습니다. 운영체제나 컴구 쪽을 공부하다 보면 스레드를 만들 일이 있는데(Multi-Threading), 이 앱은 실험해보니 스레드 생성 시스템 콜은 지원해주지 않는 것 같았어요.
그래서, 아이패드에서 운영체제 쪽 코드를 공부할 일이 있으면 ISH Shell이라는 앱을 씁니다. Alpine Linux 계통이라 gcc / 표준 라이브러리 같은 것들이 apk 형식으로 다운받을 수 있어서 아이패드에서 리눅스 환경을 사용할 수 있습니다.
참고하시기 바랍니다.

정말 감사합니다!!! 오늘도 좋은 하루 되세요
오랜만입니다.. 방굽습니다안녕하세용 ~_~
성대 지능형소프트웨어학과에 관심이 있는데여
사진에 있는게 학사과정 로드맵인데 컴공보다 많이 뻑세려나요??
우선… 많이 힘들다고 보여집니다. 물론 저 과목들을 다 이수해야 하는 것은 아닐 테지만, 1학년 때 자구와 컴구를 동시에 배운다는 게 꽤 놀랍긴 하네요.
이론적으로 성대 솦이면 매우 뛰어난 사람들이 가는 곳이긴 하지만… 그럼에도 코딩을 처음 배우는 사람에겐 부담이 매우 많이가는 커리큘럼으로 보여집니다.
처음에 언어 문법 하나 익히기도 어려운 게 현실인데, 거기에 컴구 + 자구를 6개월 안에 해치운다는 건… 아주 어렵죠.
뿐만이 아니라 인공지능론까지 배우니… ㅋㅋㅋ
그냥 새벽까지 코딩하지 않으면 학점 관리 자체가 안 될 수도 있을 것 같습니다.
제가 생각하기에는 아마 1학년으로 편성된 과목들을 재수강해서 3-4학년 즈음에 다시 듣는 것이 훨씬 이득인 것도 같습니다 ㅋㅋㅋ
컴구와 운체에 대한 전체적인 흐름을 알게 되면 그때 ‘시스템 프로그래밍’이나 네트워크론을 공부할 때 좋은 효율이 나오거든요…
재수강까지 ㄷㄷ.. 미리 공부해야 좀 나을려나요 ㅠ
미리 공부하는 것도 괜찮습니다만, 우선 시간이 나실 때 편안한 마음으로 해보세요. 처음에는 즐기면서 공부해야 나중에 체력이 길러집니다.
물론, 이건 학부생의 개인적인 견해이고 상황에 따라서는 저 커리큘럼을 소화만 할 수 있다면 정말 좋은 건 맞아 보입니다.
자구 알고리즘은 뭐 그렇다 쳐도 신호시스템이나 운영체제 2학년은 좀 많이 빡센데... 보통 이런 과 특징이 과목이름은 타 학교와 같지만 내용은 좀 약화하고 대신 넓게 건드릴 확률이 있어요. 인공지능에 초점을 꽤 두는 학과인건가요? 인공지능개론이나 기계학습수학, 기계학습원론, 심층 신경망 개론 이것들은 굳이 이렇게 쪼개지 않아도 될 것 같은데 아마 이것도 얕게 배울것 같아요. 컴구도 개론이라고는 하지만 적어도 논리회로 제대로 하고나서 베릴로그로 2-3학년때나 건드릴 수 있는데, 저건 그냥 정말 기초적인 회로 위주로 다루나 보네요.