Это звучит, как вы, возможно, потребуется список пар, или даже список списков пар, в зависимости от того, как я анализирую свои требования :-)
Вы можете посмотреть в std::queue
или std::deque
для аспекта списка, и std::pair
для парного аспекта. Следуйте за ссылками для деталей.
В качестве отправной точки, см следующий код:
#include <iostream>
#include <queue>
#include <utility>
int main (void) {
std::queue <std::pair <int,int> > xyzzy = std::queue <std::pair <int,int> >();
std::pair <int,int> p1 = std::pair <int,int> (3, 9);
xyzzy.push (p1);
std::pair <int,int> p2 = xyzzy.front();
xyzzy.pop();
std::cout << p2.first << ' ' << p2.second << '\n';
return 0;
}
Это создает очередь пар целых чисел, толкает один на и хлопает его - вы на самом деле нужно front/pop
комбо для этого, так как queue::pop
просто удаляет самый старый элемент, а не возвращает его - почему те, кто предпочел игнорировать десятилетия обычной практики, вне меня :-)
Затем он печатает два целых числа, составляющих пару.
Этого должно быть достаточно, чтобы проиллюстрировать все операции и типы данных, необходимые для реализации ваших вещей.
Сказав это, Майк Сеймур делает правильный ответ в комментариях. Если вам нужно поведение, отличное от очереди, в ваших «списках», вы, вероятно, должны выбрать вектор, а не очередь или deque.
Векторы позволяют получать случайные элементы в списке, а не только голову или хвост.
Недостатком является то, что вы можете потерять эффективную способность организации очереди, если это важно - нет простого способа вытолкнуть элемент в перед вектором, только в конце, и появляется с фронта, вероятно, будет неэффективен. Это выполнимо, но вряд ли будет настолько эффективным, поскольку это не то, для чего векторы были рассчитаны на:
Тем не менее, способность случайного доступа может стоить жертвы.
Следующий код показывает, как использовать вектор вместо очереди, включая поведение очереди, как если вам это нужно:
#include <iostream>
#include <vector>
#include <utility>
int main (void) {
std::pair <int,int> p1;
std::vector <std::pair <int,int> > xyzzy;
xyzzy = std::vector <std::pair <int,int> >();
for (int i = 0; i < 10; i++) {
p1 = std::pair <int,int> (i, i * i);
xyzzy.push_back (p1);
}
while (xyzzy.size() > 0) {
std::pair <int,int> p2 = xyzzy.at(0);
xyzzy.erase (xyzzy.begin());
std::cout << p2.first << ' ' << p2.second << '\n';
}
return 0;
}
с выходными бытием:
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
В первом наборе данных, который вы предоставляете, похоже, что у вас есть две последовательности, это правильно? –
Вы также говорите, что хотите добавить две (или более?) Последовательности. Вы имеете в виду, что хотите присоединиться к двум последовательностям, чтобы сделать больше? –
@freefallr: yes and yes – Mark