2016-10-29 22 views
1

移動セマンティクスのためにforループ範囲ベースにコードを簡素化しようとしたとき、私は私のコードのサイズを削減し、簡素化しようとしているが、このエラーが発生しましたよための一致なし:「演算子は[]」

BucketSort.cpp: In member function ‘void BucketSort::sort(unsigned int)’: 
BucketSort.cpp:118:34: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int> [10]’ and ‘std::vector<unsigned int>’) 
     std::move(std::begin(vecs[i]), std::end(vecs[i]), std::back_inserter(numbersToSort)); 
           ^
BucketSort.cpp:118:53: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int> [10]’ and ‘std::vector<unsigned int>’) 
     std::move(std::begin(vecs[i]), std::end(vecs[i]), std::back_inserter(numbersToSort)); 
                ^
make: *** [BucketSort.o] Error 1 
Ivans-MacBook-Pro:CS6771A5-ParallelBucketSort ivanteong$ 

Iから簡素化しようとしている:範囲ベースのforループに

numbersToSort = std::move(vecs[0]); // bucket containing 0 (handle case where there is a number that is 0) 
    std::move(std::begin(vecs[1]), std::end(vecs[1]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[2]), std::end(vecs[2]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[3]), std::end(vecs[3]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[4]), std::end(vecs[4]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[5]), std::end(vecs[5]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[6]), std::end(vecs[6]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[7]), std::end(vecs[7]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[8]), std::end(vecs[8]), std::back_inserter(numbersToSort)); 
    std::move(std::begin(vecs[9]), std::end(vecs[9]), std::back_inserter(numbersToSort)); 

:私の.hファイルに

for (auto i : vecs) { 
    std::move(
     std::begin(vecs[i]), 
     std::end(vecs[i]), 
     std::back_inserter(numbersToSort) 
    ); 
} 

宣言は以下のとおりです。

std::vector<unsigned int> numbersToSort; 
std::vector<unsigned int> vecs[10] = { 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>(), 
    std::vector<unsigned int>() 
}; 

何が間違っているのですか?

答えて

3

は、私が何をしたいことはもっとあると思う:

for (auto& vec : vecs) { 
    std::move(
     std::begin(vec), 
     std::end(vec), 
     std::back_inserter(numbersToSort) 
    ); 
} 

範囲ベースのforループautoの代わりにauto&を使用して、インデックスが、真の変数のコピー、またはを展開しません、の内容を参照します指定されたコンテナ

+0

ありがとうございました! – iteong