Создание нового подвектора C ++?

Скажем, у меня есть вектор со значениями [1,2,3,4,5,6,7,8,9,10]. Я хочу создать новый вектор, который ссылается, например, на [5,6,7,8]. Я предполагаю, что это всего лишь вопрос создания вектора с указателями или мне нужно нажать на все нужные мне промежуточные значения?

Один из конструкторов std::vector принимает диапазон:

 std::vector v; // Populate v. for (int i = 1; i <= 10; i++) v.push_back(i); // Construct v1 from subrange in v. std::vector v1(v.begin() + 4, v.end() - 2); 

Это довольно легко сделать с std::valarray вместо вектора:

 #include  #include  #include  #include  int main() { const std::valarray arr={0,1,2,3,4,5,6,7,8,9,10}; const std::valarray& slice = arr[std::slice(5, // start pos 4, // size 1 // stride )]; } 

Что берет «срез» валара, более общий, чем вектор.

Для вектора вы можете сделать это с помощью конструктора, который принимает два iteratorа:

 const std::vector arr={0,1,2,3,4,5,6,7,8,9,10}; std::vector slice(arr.begin()+5, arr.begin()+9); 

Вам не нужно использовать push_back если вы этого не хотите, вы можете использовать std::copy :

 std::vector subvector; copy ( v1.begin() + 4, v1.begin() + 8, std::back_inserter(subvector) ); 

Я бы сделал следующее:

 #include  #include  using namespace std; void printvec(vector& v){ for(int i = 0;i < v.size();i++){ cout << v[i] << " "; } cout << endl; } int main(){ vector v; for(int i = 1;i <= 10;i++) v.push_back(i); printvec(v); vector v2(v.begin()+4, v.end()-2); printvec(v2); return 0; } 

~