Нарезка вектора

Если вы используете Unix,

import signal
  ...
class Alarm(Exception):
    pass

def alarm_handler(signum, frame):
    raise Alarm

signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(5*60)  # 5 minutes
try:
    stdoutdata, stderrdata = proc.communicate()
    signal.alarm(0)  # reset the alarm
except Alarm:
    print "Oops, taking too long!"
    # whatever else
30
задан 2 revs, 2 users 98%No Name 20 January 2017 в 11:09
поделиться

3 ответа

Вы бы просто использовали пару итераторов:

typedef std::vector<int>::iterator vec_iter;

void doSomething(vec_iter first, vec_iter last) {
    for (vec_iter cur = first; cur != last; ++cur) {
       std::cout << *cur << endl;
    }
}

int main() {
   std::vector v();
   for (int i= 0; i < 10; ++i) { v.push_back(i); }

   doSomething(v.begin() + 1, v.begin() + 5);
   doSomething(v.begin() + 2, v.begin() + 4);
   return 0;
}

В качестве альтернативы, библиотека Boost.Range должна позволять вам представлять пары итераторов как один объект, но приведенный выше канонический способ сделай это.

28
ответ дан 28 November 2019 в 00:01
поделиться

Вы можете представить эти «срезы» с помощью пары итераторов.

2
ответ дан 28 November 2019 в 00:01
поделиться

Как говорили другие, вы можете представить «срез» как пару итераторов. Если вы хотите использовать Boost, вы можете использовать концепцию диапазона. Тогда вам будут доступны даже функции-члены begin () / end (), и все это будет очень похоже на контейнер.

2
ответ дан 28 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: