코드 교훈 총결

3531 단어
2019/10/2는 모든 값 표현식에 조심스럽게 대처한다.
BFS를 쓸 때 나는 이런 코드를 썼다
        while (!que.empty()) {
            auto p = que.front();
            que.pop();
            int d = maze[p.first][p.second]; // maze should be dis
            rng (i, 0, 4) {
                int x = p.first + dx[i], y = p.second + dy[i];
                if (x >= 0 && x < R && y >= 0 && y < C && dis[x][y] > d + 1) {
                    dis[x][y] = d + 1;
                    que.emplace(x, y);
                }
            }
        }

그중int d = maze[p.first][p.second];은 잘못 썼다.maze 지도를 대표하는 것은 dis이어야 한다.
2019/9/27용std::next_permutation으로 전체 배열을 매거할 때 초기 배열이 사전 서열의 가장 작은 배열임을 확보해야 한다.
오늘 왕이게임의 교필고사를 한다."""ASDFGH""라는 여섯 글자를 모두 정렬해야 하는 문제가 있습니다."처음에 이렇게 썼어요.
string s = "ASDFGH";
do {
  // do something with s
} while (next_permutation(s.begin(), s.end()));

결과는 60퍼센트의 점수만 얻었다.
상술한 코드가 잘못된 점은 모든 배열을 열거하지 않았기 때문이다."ASDFGH"를 처음 배열하는 것은 사전 서열의 가장 작은 배열이 아니다. 이렇게 쓰면 사전 서열이 "ASDFGH"와 같은 모든 배열보다 크다는 것을 열거할 뿐이다.
맞춤법
string s = "ASDFGH";
sort(s.begin(), s.end());
//    string s = "ADFGHS";
do {
  // do something with s
} while (next_permutation(s.begin(), s.end()));

2019/9/23 호출std::unique 또는 std::unique_copy(since C++17) 이전에 반드시 수조가 질서정연하다는 것을 확보해야 한다std::sort.
2018/5/19는 정수로 집합을 표시할 때 i번째 원소가 집합 S에 속하는지 판단할 수 있다if (S & 1 << i) 또는if (S >> i & 1).i번째 원소가 집합 S에 속하지 않는지 판단할 때 나는 보통 if ( (S & 1 << i) == 0 )을 사용하지만 이렇게 쓰면 나쁜 점이 하나 있다. 바로bitwise and(&) 산자의 우선순위가 ==산자보다 낮다는 것을 잊어버리는 것이다.이 문제를 피할 수 있는 두 가지 더 좋은 방법이 있는데 첫 번째는if ( !(S & 1 << i) )이다. 왜냐하면 나는 ! 산자의 우선순위가 매우 높다는 것을 알고 있기 때문이다.두 번째는 if ( ~S & 1 << i )괄호가 필요 없고 우아한 XD라고 할 수 있지만 다산~S이라 느리지 않을까요?(현학).
Remark: &,^,|,&&,||는 모두 ==보다 우선순위가 낮다.
2018/4/21 WA는 먼저 입력 데이터의 유형이 데이터 범위와 일치하는지 확인해야 합니다.
2018/4/18 어떤 문제에서 다음과 같은 과정을 실현해야 한다.이원조 (std::pair 의 집합을 유지합니다.pair의 2차원은 unique와const의 ID를 나타냅니다. 1차는 줄어들지 않고, 항상 0달러보다 큽니다.매번 집합에서 1차원이 $0$인pair를 꺼내고 집합에서 삭제하면 이런pair가 존재할 것을 보장합니다. 그리고 집합 중의pair의 1차원을 $1$줄입니다.
내 쓰기 방법:
  • std::set<:pair>> 지원으로 1차원이 $0달러인pair
  • 추출
  • 각 ID에 해당하는 std::pair::first의 현재 값을 하나의 배열로 저장합니다.
  • set의 첫 번째 요소의 1차원과 그룹의 값이 같지 않으면 업데이트
  • 현재 set의 첫 번째 요소의 실제 값이 $0달러라는 것을 확신할 수 없기 때문에 문제가 있습니다.올바른 방법은 set의 요소를 즉시 업데이트하는 것입니다. (먼저erase가 낡았고 insert가 새 것입니다.) 그리고 상술한 그룹도 필요하지 않습니다.
    2018/1/1 $m$추출 연산은 반드시 최종 결과가 $0$에서 $m-1$사이임을 보장합니다.
    DP: 합법 상태이지만 계산되지 않은 상태를 고려해야 합니다.
    2018/1/2 변수명명: #include 도입 헤드 파일로 prev,next 두 이름 모두 변수명 충돌을 일으키면 prvnxt로 대체할 수 있다.
    2018/1/3 남용for순환하지 말고while순환이 적합할 때while를 사용해야 한다.
    2018/4/2 "간단한 문제를 복잡하게 만들자", "짧은 코드로 해결할 수 있지만 내 코드는 길다."이런 종류의 잘못은 용인할 수 없다.
    2018/4/3 range-for로 용기a를 훑어보았을 때 용기의 요소를 수정하려면 for(auto &x: a)를 사용해야 한다.수정하지 않을 때도 이렇게 사용할 수 있기 때문에range-for를 사용할 때는 항상 인용의 형식을 사용한다.

    좋은 웹페이지 즐겨찾기