Có cách nào tốt để cắt một số std::vector
dựa trên các phần tử trong một std::set
không? Nói cách khác, các phần tử trong std::set
giữ các chỉ mục mà tôi muốn trong vectơ. Chắc chắn, tôi có thể thực hiện điều này với các mã:Cách cắt một `std :: vector` dựa trên các phần tử trong` std :: set`
#include <set>
#include <vector>
#include <iostream>
#include <iterator>
template <typename T>
std::vector <T> slice(
std::vector <T> const & x,
std::set <unsigned int> const & I
) {
auto y = std::vector <T>();
for(auto const & i : I)
y.push_back(x[i]);
return y;
}
int main() {
auto x = std::vector <double> { 1.2, 2.3, 3.4, 4.5, 5.6};
auto I = std::set <unsigned int> { 0, 3, 4};
auto y = slice(x,I);
std::copy(y.begin(),y.end(),std::ostream_iterator <double>(
std::cout,"\n"));
}
trả về đúng
1.2
4.5
5.6
Tuy nhiên, điều này cảm thấy một chút vụng về. Có cách nào tốt hơn?
Đừng quên 'std :: vector :: reserve'. – LogicStuff