현대 C 언어에서 간단한 문제를 해결하는 여러 가지 방법++
이렇게 하는 유일한 동기는 바로 학습의 즐거움이다. 그래서 이런 제한을 이용하여 (우리가 여기서 한 가닥의 희망을 보게 하고 우리는 더 많은 시간을 일을 할 수 있도록) 나는 C++를 배우는 데 주력하고 기진맥진하기 전에 내가 얼마나 멀리 갈 수 있는지 볼 것이다. D.
면책 성명: 저는 C++ 전문가가 아니기 때문에 대부분의 내용이 잘못된 것일 수 있습니다. 저는 C++ 분야의 경험도 없고 학술적 성실도 없지만 당신이 발견한 부족한 점을 지적하는 것을 받아들입니다.
기포 정렬법.
이것은 가장 간단한 알고리즘 중의 하나다.이것은 O(n2) 알고리즘으로 해석할 수 있으며, 이것은 정렬되지 않은 숫자를 포함하는 그룹이 두 번 교체된다는 것을 의미한다.그리고 두 개의 연속적인 원소를 찾으면 서로 교환된다.
먼저 c++ 템플릿을 준비합니다.
#include <bits/stdc++.h>
int main () {
    using namespace std;
    return EXIT_SUCCESS; // I will use this macro here, which represents de '0' value.
}
vector<int32_t> vec = { 92, 23, 1, 6, 25, 72, 66, 10 };
int32_t으로int,long unsigned int,long.int32_t가 오늘날의 관례인 것 같다.정확한 이유는 모르겠지만 현대 언어는 크로스플랫폼의 일치성을 확보하기 위해 매우 특정한 데이터 유형을 필요로 하는 것 같다.using입니다.vec 변수의 두 차례 덧붙임 교체입니다.for (size_t i = 0; i < vec.size(); ++i) {
    for (size_t j = 0; j < vec.size() - 1; ++j) {
        if (vec[j] > vec[j + 1]) {
          swap(vec[j], vec[j + 1]);
        }
    }
}
size_t로 대체int를 사용했다. vec.size()가 size_t로 되돌아오기 때문이다int.만약 내가 int를 사용한다면 그것이 작용할 것이다. 이것은 매우 뚜렷한 것 같다. size_t는 int로 전환할 수 있지만 size_t는 int가 부족하지 않도록 모든 유형의 크기를 표시할 수 있기 때문이다.실행할 때 (또는 컴파일할 때?) 추가 내부 강제 변환을 피할 수 있습니다.swap 방법이 있다.pre-increment는 상용++i를 대체한다post-increment.그 결과 i++ 덧셈을 하기 전에 저장된 원시 값을 되돌려 주는 것은 i++ 덧셈과 상반된다.다시 말하면 i++ 최소한 i++ 상황에서는 추가 메모리를 사용하여 이 값을 저장할 필요가 없다.for...loop 변수의 또 다른 교체는 단지 화면에 결과를 나타내기 위한 것이다.for (size_t i = 0; i < vec.size(); ++i) {
    cout << vec[i] << endl; // Replacement of "\n"
}
vec결과:92
72
66
25
23
10
6
1
나는 하드코딩 데이터로 벡터를 초기화하는 대신 램바다 표현식을 사용하여 무작위 수를 생성할 것이다.이 하나가 있으면 성능을 최대한 걱정하지 않겠습니다. 지금까지 첫 번째 해결 방안이 더 빠른 것 같습니다.
vector<int32_t> vec(100); // This time let's make a bigger vector.
auto genRandomNumber = [](){ return (std::rand() % 100); };
std::generate(vec.begin(), vec.end(), genRandomNumber);
벡터를 초기화하는 또 다른 방법은 벡터의 초기 용량을 설정하는 것이다. 이 예에서 100이다.그리고 이
g++ -std=c++2a -O2 -Wall sort.cpp -o sort lambda 표현식을 만들었습니다. 0에서 100 사이의 무작위로 생성된 숫자만 포함하고, 이 숫자는 나중에 genRandomNumber 함수에 사용됩니다.1에서 20 사이의 모든 수로 나눌 수 있는 최소수.
다음 문제는 더욱 간단해질 것이다. 그것은 단지 하나의 순환만 있을 뿐이다.내 머릿속에서 나는 가능한 (효과적인) 해결 방안을 생각해 낼 수 있다.0에서 무한대 사이를 순환하거나 가능한 최대 길이를 순환하며, 추악한 if에서 1부터 20까지의 숫자로 나눌 수 있는지 확인하십시오.
using namespace std;
for (size_t i = 1; i < std::numeric_limits<size_t>::max(); ++i) {
        if (
            i % 1 == 0 &&
            i % 2 == 0 &&
            i % 3 == 0 &&
            i % 4 == 0 &&
            i % 5 == 0 &&
            i % 6 == 0 &&
            i % 7 == 0 &&
            i % 8 == 0 &&
            i % 9 == 0 &&
            i % 10 == 0 &&
            i % 11 == 0 &&
            i % 12 == 0 &&
            i % 13 == 0 &&
            i % 14 == 0 &&
            i % 15 == 0 &&
            i % 16 == 0 &&
            i % 17 == 0 &&
            i % 18 == 0 &&
            i % 19 == 0 &&
            i % 20 == 0
        ) {
            // Print result
            cout << "Result :: " << i << endl;
            break; 
        }
    }
이제 첫 번째 순환에서 1에서 20으로 교체해서 조금 보기 싫지 않게 하기 위해서 C++11
std::generate을 사용하겠습니다.
int32_t x = 1;
for (size_t i = 1; i < numeric_limits<size_t>::max(); ++i) {
    for (auto p: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}) {
      x = p;
      if (i % p != 0) break;
    }
    if (x == 20) {
        // Print result
        cout << "Result :: " << i << "\n";
        break;
    }
}
이제 벡터를 생성하기 위해 lambda 표현식을 다시 사용합니다.
vector<int32_t> vec(20);
auto funcGen = [counter = 0]() mutable -> int32_t { return ++counter; };
std::generate(vec.begin(), vec.end(), funcGen);
range-based for loop를 전달했습니다. 이것은 우리가 되돌아오는 숫자를 저장할 수 있도록 합니다. 왜냐하면 우리는 매번 교체할 때마다 1씩 증가하는 숫자를 되돌려 주기를 원하기 때문입니다. 유일한 우아한 방법은 이런 형식을 사용하는 것입니다.counter는 lambda 표현식mutable을 알려준다. 이 표현식은 포획된 모든 변수를 수정할 수 있다. 이 예에서counter.Reference
이 문제에 관하여(현대 C 언어에서 간단한 문제를 해결하는 여러 가지 방법++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mrsoneji/many-ways-to-solve-simple-problems-in-modern-c-3apc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)