SCRIPTS BY
close
프로필 배경
프로필 로고

SCRIPTS BY

  • 분류 전체보기 (76)
    • C++ (19)
    • Flutter, Dart (13)
      • Flutter (11)
      • Dart (2)
    • Database (8)
    • Web (5)
    • 회고록 (6)
    • 개발일지 (6)
    • Review (7)
      • Books (2)
      • Conference & Seminar (4)
      • IT Products (1)
    • Notion (2)
    • Algorithms (3)
    • Computer Science (6)
  • 홈
  • 방명록
[모던 C++] C++에서 랜덤값 얻기/ rand() 함수 쓰면 안 되는 이유

[모던 C++] C++에서 랜덤값 얻기/ rand() 함수 쓰면 안 되는 이유

rand() 함수 사용하면 안 되는 이유 우리가 C언어를 사용할 때, 랜덤한 넘버를 얻기 위해서 종종 다음과 같은 코드를 사용하는 경우를 볼 수 있다. #include #include int main(void) { srand(time(NULL)); int randNum = rand() % 100; return 0; } 위 코드는 0부터 99까지 범위에서 난수를 생성해서 randNum에 저장하는 코드이다. 위 코드는 두 가지 심각한 문제를 갖고 있는데 일단 rand()의 시드를 초기화하는데 time을 사용한 것도 문제고 그보다 더 큰 문제는 rand()를 사용했다는 것 그 자체이다 왜 rand() 함수를 사용한 것이 문제가 되는가. 그전에 간단히 컴퓨터가 어떻게 랜덤 함수를 구현하는지 알아보자. 사실 디지..

  • format_list_bulleted C++
  • · 2023. 3. 6.
  • textsms
[C++] struct와 class의 차이점

[C++] struct와 class의 차이점

구조체와 클래스의 차이점 C++에는 여러 데이터 집합을 담을 수 있는 대표적인 방법이 두 가지가 있는데 구조체(struct)와 클래스가 바로 그것이다. 둘이 역할은 비슷해보이는데, 둘의 차이점은 무엇일까? 접근 제한자 - struct는 public, class는 private 일단 기본 접근 제한자가 다르다. 기본 접근 제한자란 해당 구조체 혹은 클래스를 선언하고, 명시적으로 접근 제한자를 설정하지 않았을 때 기본적으로 주어지는 멤버의 접근 제한자를 의미한다. 그래서 struct를 생성했을 때, 접근 제한자를 아무것도 쓰지 않는다면 자동으로 모든 멤버가 public으로 처리된다. 반대로 class를 생성했을 때는 기본적으로 private하게 주어진다. struct UserData { int ID; // ..

  • format_list_bulleted C++
  • · 2023. 2. 27.
  • textsms
잘못 쓰면 백 배 느린 for 문-이중 for 문 제대로 쓰는 법, 캐시 친화적 반복문

잘못 쓰면 백 배 느린 for 문-이중 for 문 제대로 쓰는 법, 캐시 친화적 반복문

개요 프로그래밍을 하다보면, 혹은 백준 문제를 풀다 보면 자주 이중 for문, 혹은 그 이상의 중첩된 반복문을 사용해야 할 때가 있는데, 이때 이중 for 문을 잘 못 쓰면 코드가 100배 가까이 느려질 수도 있다. 이건 비단 C++만의 문제는 아니고 모든 프로그래밍에 적용되는 이야기이다. 백 배 이상 느린 중첩 반복문 // 1번 방법 for (std::size_t i = 0; i < N; ++i) { for (std::size_t j = 0; j < M; ++j) { arr[i][j] *= 2; } } // 2번 방법 for (std::size_t i = 0; i < M; ++i) { for (std::size_t j = 0; j < N; ++j) { arr[j][i] *= 2; } } 위에 코드를 보..

  • format_list_bulleted C++
  • · 2023. 2. 23.
  • textsms
[C++] vector iterator, range base loop 사용 시 emplace_back 쓰지 마세요

[C++] vector iterator, range base loop 사용 시 emplace_back 쓰지 마세요

iterator 사용 시 흔히 하기 쉬운 실수 C++ 개발자라면 무조건 알아야 하는 주의 사항 iterator 사용 시 push, emplace 사용 시 발생하는 버그 iterator를 사용하면 C++에서 STL 라이브러리들을 쉽게 다룰 수 있습니다. iterator에 대한 글을 보고 싶다면 iterator, 왜 사용할까?라는 글을 참고하세요. vector를 사용할 때 iterator는 아주 유용하죠. 그런데 vector iterator 사용 시 모든 사람이 꼭 알아야 주의해야 할 점이 있습니다. 바로 iterator 사용 시 그 안에서 push_back, emplace_back과 같은 연산을 사용해선 안 된다는 것입니다. 이건 정말 C++를 다루는 사람이라면 반드시 알아둬야 할 사항이고, 이로 인해 심..

  • format_list_bulleted C++
  • · 2023. 2. 20.
  • textsms
[C++] std::iterator, 왜 사용할까?

[C++] std::iterator, 왜 사용할까?

iterator, 왜 사용할까? iterator의 개념 먼저 C++로 코딩을 하신다고 하면, 반복자 iterator에 대해서 꼭 아시는게 좋습니다. iterator는 C++98 이전부터 있어왔던 포인터의 일종입니다. 매우 강력한 기능이고, 의외로 C++을 사용할 때 C와 다르게 포인터를 사용할 일이 정말 특이한 경우가 아니라면 거의 없는데, iterator는 정말 많이 사용합니다. iterator에서 가장 많이 사용하는 메소드는 begin()과 end()인데, 각각 컨테이너의 시작점, 그리고 끝점 + 1 칸을 리턴합니다. (그림 출처: cppreference vector begin, end) end()가 가장 끝점이 아닌, 가장 끝점에서 한 칸 더 나아간 위치를 리턴한다는 것을 주의하십시오. 그리고 it..

  • format_list_bulleted C++
  • · 2023. 2. 20.
  • textsms
[모던 C++] std::string_view, 왜 사용할까?

[모던 C++] std::string_view, 왜 사용할까?

std::string_view 란 std::string_view 는 C++17부터 추가된, 문자열을 다루는데 아주 강력하고 효과적인 컨테이너입니다. 내부 구현은 다르겠지만, std::string_view의 동작과 기능은 std::span과 거의 비슷합니다. std::span이 std::vector, C-style array, std::array 등의 다양한 형태의 배열을 효율적으로 다루기 위해서 존재했다면, std::string_view는 std::string, const char *, char [] 와 같은 다양한 형태의 문자열을 효율적으로 다루기 위해서 존재합니다. 한편 std::span에 대해서 궁금하시다면, [모던 C++]std::span, 왜 쓰는 걸까?라는 글을 보고 오시면 도움이 될 것 같습..

  • format_list_bulleted C++
  • · 2023. 2. 16.
  • textsms
[C++] OOP는 만능이 아니다. 데이터 중심 프로그래밍

[C++] OOP는 만능이 아니다. 데이터 중심 프로그래밍

객체 지향 프로그래밍은 만능이 아니다라는 말은 다소 논란의 여지가 있다. 그러나 OOP도 결국 하나의 프로그래밍 패러다임에 지나지 않고, 장점이 있는만큼 단점 역시 있기 마련이다. 그리고 OOP를 개선하기 위해, 혹은 새로운 프로그래밍 패러다임을 만들고자 다양한 패러다임이 등장하였다. C++는 기본적으로는 OOP 중심의 언어이지만, 람다 함수와 function 객체를 이용한 함수형 프로그래밍, 그리고 C언어 스타일의 절차 지향 프로그래밍 등 역시 지원한다. 이렇듯 시대의 변화에 맞추어 OOP 역시 다른 패러다임과 맞물려서 변형되어 사용되고 있고, 이제 단순히 OOP만을 지원하는 언어는 살아남기 힘들어졌다. OOP는 기본적으로 프로그래밍 역사상 가장 성공한 프로그래밍 패러다임이고, 또한 가장 널리 쓰이는 ..

  • format_list_bulleted C++
  • · 2023. 2. 13.
  • textsms
[모던 C++] std::span, 왜 쓰는 걸까?

[모던 C++] std::span, 왜 쓰는 걸까?

std::span std::span 이란 C++의 데이터 컨테이너를 메모리 상의 저장 방식의 차이로 나눠보자면, 크게 연속적인 컨테이너(Sequential Type)과 비연속적인 컨테이너(Non sequential Type)로 나눌 수 있습니다. 연속적인 컨테이너는 C-스타일 배열, std::array, std::vector, std::string 등이 그 예시입니다. 반면 비연속적인 컨테이너로는 std::list, std::map, std::unordered_map, std::set, std::unordered_set, std::stack 등이 있습니다. 이러한 컨테이너는 주로 내부적으로 포인터를 통해 연결되어 있으며, 그렇기 때문에 메모리 구조상에서 서로 떨어져 있습니다. std::span 연속적인 ..

  • format_list_bulleted C++
  • · 2023. 2. 6.
  • textsms

C++에서 환경의 쓰레드 개수 구하기

C++에서 쓰레드 개수 구하기 C++11 이후 C++11에서 지원하는 라이브러리를 이용한다면 쉽게 쓰레드 개수를 구할 수 있다. thread 라이브러리의 std::thread::hardware_concurrency 메소드를 이용하자. hardware_concurrency()는 현재 시스템의 쓰레드 개수를 반환한다. 만약 쓰레드 개수를 알 수 없다면, 0을 반환한다. std::thread::hardware_concurrency 는 이식 가능한 (포터블)한 코드로써 리눅스, 맥os, 윈도우에서 모두 사용 가능하다. static unsigned int hardware_concurrency() noexcept; 사용 예시 #include #include int main() { const auto n = std:..

  • format_list_bulleted C++
  • · 2023. 1. 31.
  • textsms
  • navigate_before
  • 1
  • 2
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (76)
    • C++ (19)
    • Flutter, Dart (13)
      • Flutter (11)
      • Dart (2)
    • Database (8)
    • Web (5)
    • 회고록 (6)
    • 개발일지 (6)
    • Review (7)
      • Books (2)
      • Conference & Seminar (4)
      • IT Products (1)
    • Notion (2)
    • Algorithms (3)
    • Computer Science (6)
최근 글
인기 글
최근 댓글
태그
  • #모던 C++
  • #Flutter 페이지네이션 구현
  • #Flutter
  • #관계형 데이터 베이스 모델링
  • #DevTalk 후기
  • #GDSC
  • #Cursor-based Pagination
  • #MySQL
  • #C++
  • #모던C++
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바