Использование подмножества QVector в функции

Как отправить часть QVector в функцию?

QVector<int> a;
a.append(1);
a.append(2);
a.append(3);
a.append(4);
a.append(5);

Некоторая функция печати должна напечатать «2 3 4», взяв подмножество вектора в качестве аргумента.

В R это было бы возможно с помощью a[2:4].

Это вообще возможно?

Примечание. В std::vector рекомендуется использовать функцию insert для создания новой переменной. Это другая вставка, чем QVector, и поэтому я не могу найти рекомендуемый метод.


person PascalVKooten    schedule 31.08.2013    source источник
comment
Основываясь на очень быстром просмотре документов, это кажется невозможным. По крайней мере, не лаконично. Возможно, вам следует использовать std::vector вместо QVector. Вроде интерфейс лучше.   -  person john    schedule 31.08.2013
comment
@john Проблема в том, что я буду использовать QCustomPlot, который ожидает QVector.   -  person PascalVKooten    schedule 31.08.2013


Ответы (3)


Я должен написать не менее 30 символов, чтобы я мог сказать вам, вы должны попробовать:

a.mid(1,3);
person Greenflow    schedule 31.08.2013
comment
Вау, что-то такое простое. Я удивлен, что это так легко упускается из виду. - person PascalVKooten; 31.08.2013

Вы всегда можете написать функцию для выполнения этой операции за вас, например.

QVector<int> sub_vector(const QVector<int>& vec, size_t from, size_t to)
{
    QVector<int> subvec;
    for (size_t i = from; i <= to; ++i)
        subvec.append(vec[i]);
    return subvec;
}
person john    schedule 31.08.2013
comment
Добавление кажется медленным решением? - person PascalVKooten; 31.08.2013
comment
Критична ли производительность? Вы могли бы добавить звонок в резерв, я полагаю. - person john; 31.08.2013

Да, это возможно, но вы должны передать пару итераторов (начало и конец диапазона, который вы хотите, вы можете использовать std::pair для передачи только одного аргумента или использовать более четкий метод, который принимает два аргумента QVector::iterator и таким образом он понятнее что вы имели в виду, что эта функция принимает диапазон) или, если вам это проще (или элементы, которые вы хотите, не находятся в непрерывном порядке в исходном QVector), создайте другой QVector, который содержит только выбранные элементы (вид решения, предложенного Джон).

person Zlatomir    schedule 31.08.2013