여기에서 우리는 C의 제한 키워드가 무엇인지 볼 것입니다. C99 버전에서 처음 도입된 제한 키워드입니다. 이 제한 키워드가 실제로 무엇인지 봅시다. 제한 키워드는 포인터의 유형 수량자로 포인터 선언에 사용됩니다. 이 키워드는 새로운 기능을 추가하지 않습니다. 이를 사용하여 프로그래머는 컴파일러가 수행할 수 있는 최적화에 대해 알릴 수 있습니다. 제한 키워드가 포인터 p와 함께 사용되면 ptr이 포인터 p가 가리키는 개체에 액세스하는 유일한 방법임을 컴파일러에 알립니다. 따라서 컴파일러는 추가 검사를 추가하지 않습니
여기서 우리는 구조체 변수에 대해 어떤 유형의 연산을 수행할 수 있는지 볼 것입니다. 여기서는 기본적으로 struct에 대해 하나의 작업을 수행할 수 있습니다. 작업은 할당 작업입니다. 같음 검사 또는 기타와 같은 일부 다른 작업은 스택에 사용할 수 없습니다. 예시 #include <stdio.h> typedef struct { //define a structure for complex objects int real, imag; }complex; void displayComplex(complex c
C 라이브러리 함수 int rename(const char *old_filename, const char *new_filename) old_filename이 참조하는 파일 이름을 유발합니다. new_filename(으)로 변경됩니다. 다음은 rename() 함수에 대한 선언입니다. int rename(const char *old_filename, const char *new_filename) 매개변수는 old_filename입니다. − 이름을 바꾸거나 이동할 파일의 이름을 포함하는 C 문자열입니다. new_filename −
C 라이브러리 함수 int remove(const char *filename) 지정된 파일 이름을 삭제합니다. 더 이상 액세스할 수 없도록 합니다. 다음은 remove() 함수에 대한 선언입니다. int remove(const char *filename) 이 함수는 파일 이름을 사용합니다. 삭제할 파일의 이름을 포함하는 C 문자열입니다. 성공하면 0이 반환됩니다. 오류가 발생하면 -1이 반환되고 errno가 적절하게 설정됩니다. 예 #include <stdio.h> #include <string.h> in
여기에서 복사 생성자가 C++에서 구현되는 방법을 볼 것입니다. 논의하기 전에 복사 생성자가 무엇인지 알아야 합니다. 복사 생성자 이전에 생성된 동일한 클래스의 객체로 초기화하여 객체를 생성하는 생성자입니다. 복사 생성자는 다음 작업에 사용됩니다. - 같은 유형의 다른 개체에서 한 개체를 초기화합니다. 객체를 복사하여 함수에 인수로 전달합니다. 객체를 복사하여 함수에서 반환합니다. 복사 생성자가 클래스에 정의되어 있지 않으면 컴파일러 자체에서 복사 생성자를 정의합니다. 클래스에 포인터 변수가 있고 동적 메모리 할당이 있는 경
여기에서는 주어진 입력이 숫자 문자열인지 일반 문자열인지 확인하는 방법을 볼 것입니다. 숫자 문자열은 0 – 9 범위에 있는 모든 문자를 포함합니다. 솔루션은 매우 간단합니다. 각 문자를 하나씩 살펴보고 숫자인지 여부를 확인하면 됩니다. 숫자이면 다음을 가리키고 그렇지 않으면 false 값을 반환합니다. 예시 #include <iostream> using namespace std; bool isNumeric(string str) { for (int i = 0; i < str.length();
여기서는 C++에서 정적 멤버 변수 초기화를 초기화하는 방법을 살펴보겠습니다. C++ 클래스에 정적 멤버(함수 또는 변수)를 넣을 수 있습니다. 정적 변수의 경우 클래스를 정의한 후 초기화해야 합니다. 초기화하려면 클래스 이름, 범위 확인 연산자, 변수 이름을 차례로 사용해야 합니다. 이제 값을 할당할 수 있습니다. 다음 코드는 정적 멤버 초기화 기법을 설명합니다. 예시 #include <iostream> using namespace std; class MyClass{ private:  
여기서는 C++에서 일부 변수의 참조를 전달하는 방법을 살펴보겠습니다. 때때로 우리는 이것을 참조에 의한 호출이라고 부릅니다. 함수에 인수를 전달하는 참조에 의한 호출은 인수의 참조를 형식 매개변수에 복사합니다. 함수 내에서 참조는 호출에 사용된 실제 인수에 액세스하는 데 사용됩니다. 이는 매개변수에 대한 변경 사항이 전달된 인수에 영향을 미친다는 것을 의미합니다. 참조로 값을 전달하려면 다른 값과 마찬가지로 인수 참조가 함수에 전달됩니다. 따라서 다음 함수 swap()에서와 같이 함수 매개변수를 참조 유형으로 선언해야 합니다.
C/C++ 라이브러리 함수 void free(void *ptr) calloc, malloc 또는 realloc에 대한 호출에 의해 이전에 할당된 메모리를 할당 해제합니다. 다음은 free() 함수에 대한 선언입니다. void free(void *ptr) 이 함수는 포인터 ptr을 취합니다. 이것은 할당 해제될 malloc, calloc 또는 realloc으로 이전에 할당된 메모리 블록에 대한 포인터입니다. null 포인터가 인수로 전달되면 작업이 발생하지 않습니다. 예시 #include <iostream> #incl
C++11에서는 랜덤 라이브러리를 통해 난수를 생성할 수 있습니다. 여기에서 random_device를 한 번 사용하여 mt라는 난수 생성기 개체를 시드했습니다. 이 random_device는 mt19937보다 느리지만 시드할 필요는 없습니다. 운영 체제에 임의의 데이터를 요청합니다. 예시 #include #include 네임스페이스 std;int main() { random_device rd; mt19937 mt(rd()); uniform_real_distribution dist(20.0, 22.0); // 범위는 (int i=
여기서는 C++에서 clock()을 사용하는 방법을 살펴보겠습니다. 이 clock()은 time.h 또는 ctime 헤더 파일에 있습니다. 여기에서 이 clock() 함수를 사용하여 프로세스의 경과 시간을 찾을 수 있습니다. 경과 시간을 얻으려면 처음에 clock()을 사용하고 tak이 끝날 때 시간을 얻은 다음 값을 빼서 차이를 얻을 수 있습니다. 그런 다음 그 차이를 CLOCK_PER_SEC(초당 클록 틱 수)로 나누어 프로세서 시간을 구합니다. 예시 #include <iostream> #include <cti
역 범위 기반 for 루프를 얻으려면 부스트 라이브러리를 사용했습니다. 이 부스트 라이브러리는 매우 유명하며 몇 가지 강력한 기능을 가지고 있습니다. 여기서 우리는 배열이나 컨테이너를 사용할 수 있고, boost::adaptors::reverse()를 사용하여 루프의 범위 기반을 역순으로 사용할 수 있습니다. 예시 #include <list;> #include <iostream> #include <boost/range/adaptor/reversed.hpp> using namespace std; in
C++11에서 람다가 도입되었습니다. 람다는 기본적으로 다른 함수 호출 문 내부에 중첩될 수 있는 일부입니다. 람다식을 auto 키워드와 결합하면 나중에 사용할 수 있습니다. C++14에서는 이러한 람다 식이 개선되었습니다. 여기에서 일반화 또는 일반 람다를 얻을 수 있습니다. 예를 들어 정수를 추가하고 숫자를 추가하고 문자열을 연결할 수 있는 람다를 만들고 싶다면 이 일반화된 람다를 사용해야 합니다. 람다 식의 구문은 다음과 같습니다. - [](auto x, auto y) { return x + y; } 더 나은 아이디어를
C++를 사용하여 난수를 생성하는 방법을 살펴보겠습니다. 여기서 우리는 0에서 어떤 값까지의 범위에서 난수를 생성하고 있습니다. (이 프로그램에서 최대값은 100입니다.) 이 작업을 수행하기 위해 srand() 함수를 사용하고 있습니다. 이것은 C 라이브러리에 있습니다. void srand(unsigned int seed) 함수 rand 함수에서 사용하는 난수 생성기 시드 . srand()의 선언은 아래와 같습니다 - void srand(unsigned int seed) seed라는 매개변수를 사용합니다. 의사 난수 생성기 알
여기서는 생성자를 사용하여 const 유형 변수를 초기화하는 방법을 살펴보겠습니다. 생성자를 사용하여 const 값을 초기화하려면 초기화 목록을 사용해야 합니다. 이 초기화 목록은 클래스의 데이터 멤버를 초기화하는 데 사용됩니다. 초기화될 멤버 목록은 생성자 뒤에 콜론 다음에 표시됩니다. 멤버는 쉼표로 구분됩니다. 예시 #include <iostream> using namespace std; class MyClass { private: const int x; &
여기에서 우리는 C++에서 문자열의 다음 순열을 사전식으로 생성하는 방법을 볼 것입니다. 사전순으로 다음 순열은 기본적으로 더 큰 순열입니다. 예를 들어 ACB의 다음은 BAC입니다. 어떤 경우에는 사전순으로 다음 순열이 존재하지 않습니다(예:BBB 또는 DCBA 등). C++에서는 next_permutation()이라는 라이브러리 함수를 사용하여 이를 수행할 수 있습니다. 이것은 알고리즘 헤더 파일에 있습니다. 예시 #include <iostream> #include <algorithm> using name
C++에서는 함수를 오버로드할 수 있습니다. 그러나 때때로 과부하가 완료되지 않습니다. 이 섹션에서는 함수를 오버로드할 수 없는 다양한 경우를 살펴보겠습니다. 함수 시그니처가 같을 때 반환 유형만 다르면 함수를 오버로드할 수 없습니다. int my_func() { return 5; } char my_func() { return 'd'; } 멤버 함수가 클래스에서 동일한 이름과 동일한 매개변수 목록을 가질 경우 오버로드될 수 없습니다. class My_Cl
여기서 우리는 C++에서 size_t와 int의 차이점을 볼 것입니다. 표준을 고려하면 둘 다 16비트 크기의 정수입니다. 일반적인 64비트 시스템에서 size_t는 64비트이지만 unsigned int는 32비트입니다. 따라서 서로 바꿔서 사용할 수 없습니다. 한 가지 표준 권장 사항은 size_t가 최대 unsigned long만큼 커야 한다는 것입니다. 따라서 size_t 대신 unsigned long을 사용할 수 있지만 64비트 시스템에서는 unsigned long을 사용할 수 있다고 생각할 수 있습니다. Windows의
Linux 환경에서 C++를 사용하여 메모리 사용량 통계를 얻는 방법을 살펴보겠습니다. /proc/self/stat 폴더에서 모든 세부 정보를 얻을 수 있습니다. 여기서는 가상 메모리 상태와 상주 세트 크기를 가져옵니다. 예시 #include <unistd.h> #include <ios> #include <iostream> #include <fstream> #include <string> using namespace std; void mem_usage(double& vm
여기서는 C++에서 정수의 자릿수가 몇 개인지 확인하는 방법을 살펴보겠습니다. 처음에는 전통적인 규칙을 살펴본 다음 찾을 수 있는 짧은 방법을 볼 것입니다. 첫 번째 방법은 숫자를 10으로 나누어 숫자를 줄입니다. 그리고 숫자가 0이 될 때까지 계산합니다. 예시 #include <iostream> using namespace std; int count_digit(int number) { int count = 0; while(number != 0) {