본문 바로가기

C++/이론 및 용어4

너무 큰 크기의 배열이 선언되면 실행되지 않는다 아래의 문제에서 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 카드의 풀을 배열로 선언해서 카운트 하려고 하면, 배열의 크기가 1천만이 된다 1천만의 크기를 가진 배열을 선언해서 실행해보니 예상치 못한 에러로 종료가 되었다 혹시나 해서 배열의 크기를 10만으로 줄이니 이번엔 또 잘 돌아간다 찾아보니 배열의 크기가 너무 크면 컴파일러가 프로그램의 실행을 막는다고 한다 이유는 몇가지가 있지만 결국 성능상 효율 문.. 2022. 8. 5.
[c++] string 동적 할당에 관하여 알고리즘 문제를 풀다 런타임에러가 나서 고민하다 질문에 대한 답변으로 깨달아서 간단하게 정리하려고한다 string 이란 int a[4] 같은 정적 크기를 가진 배열이 아니다 동적이니 string 은 사실상 백터라고 보면 된다 따라서 string 변수만 선언하고 초기화를 안한채로 아래처럼 사용하면 잘못된 코드이다 string ori; string s; cin >> s; for(int i=0; i 2022. 6. 13.
iterator 반복자 iterate 반복하다 iterator 반복자 반복자란 반복하는 다음 데이터를 가리키는 배열의 일종이다. 배열이고 가리키니 포인터로서의 성질도 있다 반복자란 기능적으로 배열의 부분집합에 해당된다 배열처럼 연속되는 데이터를 다룰때 반복해서 넘어가서 가리키는 배열의 그 기능만 가져온 것이다 왜 기능도 더 많은 배열을 쓰지 반복자를 따로 쓸까? 배열로 쉬운 일이 있고, 반복자를 써야 메모리의 소모를 줄일 수 있기 때문이다 1. 배열을 사용하여 작업시, 작업에 필요한 모든 데이터들을 데이터를 올려놓고 사용해야만 하기 메모리의 소모가 크지만 반복자를 사용할때는 현재 사용하는 데이터 하나만 메모리에 올려서 사용하면 되기 때문에 메모리 사용을 줄일 수 있다 2. 배열의 경우, 배열에서 값을 가져올 시 인덱스만 알면 .. 2022. 6. 8.
[c++] namespace 자바에서 두 메소드의 이름이 같아도 소속된 패키지나 클래스가 다르면 다른 메소드이듯이 C++ 에서도 함수명끼리 겹치지 않도록 namespace라는 상위 분류를 갖게하여 각 namespace가 가지는 함수를 호출해서 사용하도록 하였다 #include 로 불러온 파일 내에도 여러 namespace들이 있을것이다. 즉, 함수목록을 모듈화하는데 사용되었고 우리는 그 namespace 안에 있는 함수들을 알고 알맞은 방법으로 호출하면 되는것이다 자바에서 클래스명.메소드명 을 통해서 메소드를 호출하듯이 c++ 에서는 아래의 방법으로 함수를 호출할 수 있다 namespace의 이름::호출하는 함수명 하지만 매번 namespace의 이름을 쓰기 번거로우니 #include 문의 아래에 아래처럼 작성하여 사용한다 usin.. 2022. 6. 7.