3

コンパイラは、私の最後の std::cout 行とは異なります。エラーが発生している場所を特定するためにコメントしました。これについてのフィードバックをお待ちしております。前もって感謝します。

さらに、もしよろしければ、C++ コーディング プラクティスと私の含む繰り返しアルゴリズムへの準拠について、いくつかの一般的なコメントをお願いします。そのブール値を std::map の値として使用しても意味がないことはわかっていますが、std::map のような 1 次元マップをマップすることはできません。値を追加する必要があります。

#include <iostream>
#include <map>
#include <vector>

void print_vector(std::vector<int>); 
bool contains_repeats_1(std::vector<int>);

int main() { 

    int arr1[] = {1, 5, 4, 3, -8, 3, 90, -300, 5, 69, 10};
    std::vector<int> vec1(arr1, arr1 + sizeof(arr1)/sizeof(int));
    std::cout << "vec1 =" << std::endl;
    print_vector(vec1); 
    int arr2[] =  {1, 6, 7, 89, 69, 23, 19, 100, 8, 2, 50, 3, 11, 90};              
    std::vector<int> vec2(arr2, arr2 + sizeof(arr2)/sizeof(int));
    std::cout << "vec2 =" << std::endl;
    print_vector(vec2);
    std::cout << "vec1 " << contains_repeats_1(vec1) ? "does" : "doesn't" << " contain repeats" << std::endl;
        // ^^^^^^ ERROR

    return 0;

} 

void print_vector(std::vector<int> V) { 
    std::vector<int>::iterator it = V.begin(); 
    std::cout << "{" << *it;
    while (++it != V.end())
        std::cout << ", " << *it;
        std::cout << "}" << std::endl;  
}


bool contains_repeats_1(std::vector<int> V) { 
    std::map<int,bool> M;
    for (std::vector<int>::iterator it = V.begin(); it != V.end(); it++) {
        if (M.count(*it) == 0) { 
            M.insert(std::pair<int,bool>(*it, true));
        } else {
            return true;         
        }
        return false; 
    }

} 
4

2 に答える 2

3

条件演算子?:の優先順位はかなり低い ( よりも低い<<) ため、括弧を追加する必要があります。

std::cout << "vec1 " << (contains_repeats_1(vec1) ? "does" : "doesn't") << " contain repeats" << std::endl;
于 2013-11-07T07:35:08.283 に答える
1

<<より優先度が高い?:

std::cout << "vec1 " << (contains_repeats_1(vec1) ? "does" : "doesn't") << " contain repeats" << std::endl;
于 2013-11-07T07:35:28.300 に答える