Как я могу извлечь n элементов из p в std :: vector с элементами X - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть вектор с элементами X, как я могу извлечь n элементов (3 в примере ниже) из p (6 в примере) из вектора? Вот как я это сделал.

vector<int> a;
a.push_back(10);  a.push_back(11);  a.push_back(12);  a.push_back(13);  a.push_back(14);  a.push_back(15);  a.push_back(16);  a.push_back(17);
a.push_back(18);  a.push_back(19);  a.push_back(20);  a.push_back(21);  a.push_back(22);  a.push_back(23);  a.push_back(24);  a.push_back(25);
a.push_back(26);  a.push_back(27);  a.push_back(28);  a.push_back(29);   a.push_back(30);  a.push_back(31);  a.push_back(32);  a.push_back(33);
a.push_back(34);  a.push_back(35);

int X = a.size();

// code to extract 3 elements of 6 until the end of the vector
for (int i=0; i< a.size(); i+=6)
{

        if (i >= a.size())
        {
            break;
        }
        else
        {
            sub_indices.push_back(i);
        }

        if ( (i+1) >= a.size())
        {
            break;
        }
        else
        {
            sub_indices.push_back(i+1);
        }

        if ((i+2) >= a.size())
        {
            break;
        }
        else {
            sub_indices.push_back(i+2);
        }
}

Выводит результат:

10 11 12 (drop three elements) 16 17 18 (drop three elements) 22 23 24  (drop three elements) 28 29 30 (drop three elements) 34 35

Я сделал это так, но кто-нибудь может сказать мне, если есть более эффективный способ?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Вот решение:

#include <vector>
#include <iostream>

int main () {

  // Better to initilize the vector like this instead of using multiple push_back
  std::vector<int> a;
  for (int i=10; i<36; ++i)
    a.push_back (i);

  // Here is another method to initilize your vector:
//   std::vector<int> a {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
//                       23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};

  // Here you loop over all elements and only select the three first elements
  // of every six elements:
  for (int i=0; i<a.size(); ++i) 
    if (i%6 < 3)
      std::cout << a[i] << std::endl;

  return 0;
}

Оператор% дает остаток от деления двух значений типа int.

1 голос
/ 30 сентября 2019

Реорганизуйте свой вектор так, чтобы каждый элемент был 3 int s

vector< std::tuple<int, int, int> > a = {10,11,12,13, ... };

Затем используйте любой другой элемент, например ::

for (size_t i{}; i<a.size(); ++i) {
  if (i%2 != 0) {
   std::cout << a[i] << std::endl;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...