假设我有一个大小为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)
}
}
答案 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);
答案 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;
});