Функция замены в очереди и стеке: копирует ли она каждый элемент или меняет адреса? С++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Функция замены в очереди и стеке: копирует ли она каждый элемент или меняет адреса? С++

Сообщение Anonymous »

Я изучал очереди и стеки и в качестве упражнения пытаюсь реализовать их, используя другой (стек с очередью и очередь со стеком). Это можно сделать, используя одну очередь или один стек, но сейчас я делаю это с двумя. При создании функции push(), поскольку существует 2 очереди/стека, после каждого использования одна из очереди/стека заполняется, а другая – нет. (пример: в первом push() q1 пуст, q2 заполняется в следующем push(), q1 заполняется, q2 пуст) В конце функции push() мне нужно поменять их местами, чтобы я всегда мог использовать одну и ту же очередь/стек для других операций.
Меня интересует, что если я использую функцию std::swap(), копирует ли она каждый элемент для замены очереди/стека или просто меняет местами адреса.
На данный момент я просто использовал указатели p1 и p2 и менял их значения, но при этом мне приходится продолжать использовать указанные указатели во всем коде, как показано ниже. Я задаю этот вопрос, потому что, если функция std::swap() меняет адреса, я могу просто использовать это и не заморачиваться с указателями.

Код: Выделить всё

private:
queue q1, q2;
queue* p1 = &q1;
queue* p2 = &q2;
public:
MyStack() {
//constructor
}

void push(int x) {
(*p2).push(x);
while(!(*p1).empty())
{
(*p2).push((*p1).front());
(*p1).pop();
}

//swap
queue* temp = p1;
p1 = p2;
p2 = temp;

}
Это небольшое упражнение, поэтому наличие указателей повсюду — лишь незначительное неудобство, но в более крупном проекте я могу сэкономить время, используя std::swap() вместо использования такого количества указателей или реализации моя собственная функция подкачки, если она меняет адреса вместо самих элементов.

Подробнее здесь: https://stackoverflow.com/questions/783 ... e-addresse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»