컴공 일기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 2
컨텐츠가 없어서 저거라도풀어야댐
-
보통 준킬러급이라고 하면 오답률이 얼마나 되나요? 0 0
객관식/주관식 수학
-
삶이팍팍하군... 1 0
차라리태어나지않앗더라면..
-
개천재 시발..
-
올해 어디를 가려나 0 0
작년에 당한 게 있어서 믿지 않는 중
-
침착맨 채널에 리센느 원이 0 0
진짜 파이리 상이네 ㅋㅋㅋ
-
6/11감정브레인덤프 0 0
1.아무것도 못하겠다 내가 지금 뭘 하는지도 모르겠고 정체되있다 2.야발 사람이...
-
할말없다
-
50%? 60?
-
하고 싶은 게 너무 많음 0 0
오히려 이게 독이 된듯
-
오메가 오메가 블랙 수학 0 0
러셀 재종 다녀서 강매 당하는데 오메가랑 오메가 블랙 수학 각각 난이도랑 퀄 좀 알려주세요
-
약대 2 1
-
흠
-
수학이 올리기 이리 힘든거였냐 3 2
오르비 보면 국어가 문제지 수학은 무조건 오름 ㅇㅇ 이러는데 이것도 아이큐 세자리수가 전제인거같음
-
유럽 1개월 동남아 일주일 + 시시때때로 국내여행 주말마다 놀러다님 기준으로…
-
체스 불렛 1557점 3 2
하다보니 어찌저찌 됨
-
난 내인생을 많이 포기해서 5 2
엄마만 내 인생을 포기하게 하면 되는데 그게 쉽지가 않음
-
수학 낮3 기준 건동홍 5 1
화확사탐으로 몇 받아야 되너요
-
물리 볼텍스 줄 계산 ㅈ같네 0 0
그냥 mgh 1/2mv²쓰라고 왜 자꾸J쓰고 N/m쓰는데
-
기출 실모처럼 싹 풀기vs준킬 이상만 발췌풀vs걍 실모N제 5 0
뭐가 맞나요 일단 기출 돌리긴 했습니다 근데 기출학습이 된건진 모르겠음 그리고...
-
이대 영문과 학종 면접형 0 1
이화여대 영문과 학종 면접형으로 쓰려고 하고 최종 내신 2.28, 영어는...
-
내가 경찰서 신고한애 탈퇴함 11 1
서에서 연락 갔나봄 ㅋㅋㅋㅋ 피의자 특정은 된걸로 알고있음
-
누군가가 2 0
수완 평가원화를 해주면 조을텐데..
-
점점 눈을 낮추게 됨.. 18 5
예전엔 닥치고 의대였는데 요즘은 그랬던 시절이 웃길 정도임... 6모 좀 조지고 눈 많이 낮아진듯
-
돈이 돈을 불리듯 2 0
덕코도 덕코를 굴리네
-
대면 or 비대면 전에 글 올려서 여러명 상담했지만 기준에 맞거나 와닿는 분이...
-
내일계획 18 2
시험을 빠르게 조지고 집와서 치즈밥 먹으러 가본다음에 혼코노 조지기 그리고 시간...
-
167~8만 넘어도 (그 이하는 ㄹㅇ 작다는 거 느껴짐) 연애 잘만 하던데
-
솔직히 나는 꿈이 없었어 1 0
그리고 그 내 꿈은 의사가 아니라는걸알게되었고말야
-
대학가 메가커피 정직원이라(이름부터 ㅇㅇ대점) 남대생 여대생 하루에 몇백명씩 봄요...
-
배고파 4 0
야메추 좀
-
닉을바꿀까 4 1
뭘로하지
-
레어 사고싶은데 0 0
10만덕 언더로 살거 추천좀요
-
내가 수학을 왜 못하는지 깨달은게 13 1
병원에서 IQ검사해보니까 98나옴 두자릿수IQ....중학교때 무슨 IQ테스트한 건...
-
삼파 풀롱??? 0 0
삼전레버 더살걸...
-
투표상자 폐기처리 업체 가보니…추가 증거보전 신청 접수 2 1
[앵커] 선관위는 법원이 증거로 확보하려던 잠실의 투표지 상자도 폐기물 업체에...
-
안그래도 문제 개처어려운데 그래프 그림 오류있어서 내가 잘못풀었나 하고 1시간동안...
-
2026 강대x 1/4회 2 0
102m/ -22, 28, 30 101m/ -15, 22, 28, 30 25강k...
-
수완 실모는 좋은 문제도 있네 0 1
잘만듦
-
시험 감독관 알바 됐다 0 0
연락 안 오길래 안 된 줄 알았네
-
6모 4나온 허수인디 3시간밖에 투자못하는데 1시간 은 연계지문 어제공부한거복습,...
-
스엑 쉬부럴련 1 2
돈을 다 펠라해가;
-
아침공부vs저녁공부 1 0
수학학원숙제 1도 안했는데 지금 하고 늦게 잘까 아니면 지금 자고 내일 아침에 일찍...
-
번따 20 2
1년동안 얼굴만 알고 학과 이름 나이 모르는 여자애가 갑자기 번호 주거나 번호 따면...
-
영어2로 연의갈수있나여? 7 0
걍 궁금함
-
현생 살다가 9 2
잠시 들어와봤습니다
-
신령님 ㅈㄴ웃기네 1 0
한의학은 돌팔이취급하지만 무당은 잘믿는 최상위권 커뮤니티 오르비
-
아 키스마크 안 지워지네; 13 2
하지말라니깐
-
생윤 26수능 13번 같은 건 어떻게 푸는 거예요? 2 0
제가 이제 생윤 공부 해볼려는데 ㄴ, ㄷ, ㄹ 가 수특에 없더라구요... 인강...

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

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