获取不等于特定值的向量的前N个元素

时间:2016-12-01 22:36:58

标签: c++ vector

假设我有一个大小为12的std :: vector。 我想选择不等于2或30的向量的6个元素。 我该怎么做?

我试过了:

for (int i=0; i<12; i++)
         {  if (vector.at(i) != 2 && vector.at(i) != 30)
               {      selected_number = vector.at(i);


               }
             else
               {        selected_number=vector.at(i+1) 


                            }




         }

3 个答案:

答案 0 :(得分:2)

所以你想要向量foo的前6个元素是不是2或30?

怎么样

std::vector<int> bar;
for(auto i : foo){
  if(i != 2 && i != 30 && bar.size() < 6) {
    bar.emplace_back(i);
  }
}

这并不完美,但它是给这只特殊猫咪涂上皮肤的简单方法之一。

答案 1 :(得分:0)

使用range-v3,您可以

auto selectedNumbers = v
                     | ranges::view::filter([](int i) {return i != 2 && i != 30;} )
                     | ranges::view::take(6);

Demo

答案 2 :(得分:0)

使用std::copy_if

提供另一种解决方案
std::vector<int> from_vector;
std::vector<int> to_vector;
// ...
std::copy_if(from_vector.begin(), from_vector.end(),
             back_inserter(to_vector),
             [&to_vector](int i){
                 if(i != 2 && i != 30 && to_vector.size() < 6)
                     return true;
                 else
                     return false;
             });