C++ 스터디 3주차 과제 수행
오늘도 우분투 한국 커뮤니티 c++ 기초 스터디의 4주차까지 해야 될 마지막 과제를 수행하면서 기록을 남깁니다.
이 과제는 돌아오는 주의 수요일까지 해야되는 과제입니다.
수행할 과제
-
링크드리스트 초기화 코드 작성
-
1부터 1000까지의 난수로 100개의 정수를 이진 탐색하기
-
파일 입력
과제 코드 복습
- 링크드리스트 초기화 코드 작성
void del_all() {
node *prev = new node;
node *curr = new node;
curr = head;
while (curr) {
prev->next = curr->next;
delete curr;
curr = prev->next;
}
head = NULL;
tail = NULL;
// 모든 노드를 지우는 코드를 작성합니다.
}
};
int main() {
list a;
a.del_all(); //ASSIGNMENT "del_all()"
a.display();
return 0;
}
void del_all()
만 말씀드리자면,
node *prev = new node;
node *curr = new node;
이전 노드와 현재 노드를 만듭니다.
curr = head;
현재 노드를 앞으로 둡니다.
while (curr) {
prev->next = curr->next;
delete curr;
curr = prev->next;
}
현재 노드가 남아있는 동안, 현재 노드의 다음 것을 이전 노드의 다음과 연결합니다. 그리고, 떨어져 나온 현재 노드를 삭제합니다.
다시 이전 노드의 다음을 현재노드로 만듭니다.
head = NULL;
tail = NULL;
Head와 Tail을 NULL로 초기화합니다.
- 1부터 1000까지의 난수로 100개의 정수를 이진 탐색하기
#include<iostream>
#include<vector>
#include<random>
#include<algorithm>
#define min 0
#define max 1000
using namespace std;
선언해줄 헤더와 전처리기로 최소 최댓값을 정합니다.
int main()
{
random_device r;
mt19937_64 rnd(r());
uniform_int_distribution<int>range(min, max);
난수를 하드웨어 시드로 0부터 1000까지 생성합니다.
vector<int>random_vec = {};
for(int i = 0; i<100;i++)
random_vec.push_back(range(rnd));
for (int j = 0; j < random_vec.size(); j++) {
cout << random_vec[j] << "\t";
}
cout << endl;
벡터를 생성해서 for문으로 push_back해서 생성된 난수를 벡터에 넣습니다.
sort(random_vec.begin(),random_vec.end());
for (int k = 0; k < random_vec.size(); k++) {
cout << random_vec[k] << "\t";
}
cout << endl;
채워진 벡터를 이진탐색을 위해 정렬한 다음, 출력합니다.
for (int l = 0; l < max; l++)
if(binary_search(random_vec.begin(), random_vec.end(), l))
cout << l << "을 찾았습니다." << endl;
return 0;
}
이진 탐색을 테스트하기 위해 0부터 최댓값까지 찾습니다.
- 파일 입력
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ofstream File("NOTES.txt");
for (int i = 1; i < 100+1; i++) {
File << i << endl;
}
File.close();
}
ofstream으로 쓸 파일을 열고, 1부터 100까지 기입하고 닫습니다.
마무리
단기 스터디라서 이번이 마지막 과제일듯하며, 다음 주차부터 마지막 6주차까지는 해커톤형식으로 개별적으로 프로그램을 만들게 됩니다.
Written on January 14, 2018