Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Двумерный массив. Поменять четные и нечетные строки. https://www.cyberforum.ru/ cpp-beginners/ thread178313.html
Всем доброго времени суток. Задание таково "Дана матрица М(6х4). Ввести данные в матрицу с клавиатуры. Поменять местами четные и не четные строки матрицы." С первой частью задания справился. А вот как поменять местами четные и не четные строки не догоняю. Сделать это нужно обязательно используя указатели. #include "stdafx.h" #include "conio.h" int _tmain(int argc, _TCHAR* argv) { int a;...
C++ Функции и перегруженный оператор
Помогите реализовать на С++: 1.Определить пользовательский тип данных fraction (дробь), представляющий собой структуру из 2х полей: числителя (long m) и знаменателя (unsigned long n) 2. На основе создания функции НОД(найбольший общий делитель), вида unsigned long nod(unsigned long, unsigned long); 3 Используя функцию nod, создать функцию, производящую сокращение дроби: void reduce...
C++ Найти элементы, которые встречаються в массиве не менее двух раз и лежащие в заданном диапазоне https://www.cyberforum.ru/ cpp-beginners/ thread178301.html
Дано натуральное число N и одномерный массив A1, A2, …, AN натуральных чисел. Найти элементы, которые встречаються в массиве не менее двух раз и которые лежат в диапазоне значений от m1 до m2 (определяються пользователем). Указать число вхождений найденных элементов.
C++ Найти минимальную сумму положительных элементов диагоналей, параллельных побочной диагонали Помогите решить. 1. построить упорядоченный массив a из элементов массива b и c. Массивы b и c предварительно упорядочены по возрастанию. 2. дан массивa. Найти минимальную сумму положительных элементов диагоналей, параллельных побочной диагонали pomogite rewit 1. postroit uporyado4niy massiv a iz elementov massiva b i c. massivy b i c predvaritelno uporyado4eni po vozvarastaniyu 2.dan... https://www.cyberforum.ru/ cpp-beginners/ thread178298.html
C++ Количество пятниц
Вычислить кол-во пятниц, приходящихся на 13-е числа столетия с номером n, где n - заданное натуральное число.
C++ Вычисление факториала большого числа https://www.cyberforum.ru/ cpp-beginners/ thread178295.html
написать программу, которая вычисляла бы факториал заданного большого числа, например 500, и результат вычислений с точностью до единицы выводила на экран.
C++ Запуск кода в памяти https://www.cyberforum.ru/ cpp-beginners/ thread178279.html
Добрый вечер.Возник один вопрос.Возможно ли в Си сделать следующее:выделить с помощью mmap участок памяти,загрузить в него исполняемый код и запустить его,нечто вроде php-шного if (...) {include();} и если возможно,то как ?
написать программу кальуклятор, для вычисления по запросу пользователя одной формулы из трёх возможных C++
перед началом работы программа формирует информационное сообщение, в котором перечисляются формулы,которые могут быть вычеслены, а также клавиши клавиатуры, которые нужно нажать, чтобы приступить к соответствующим вычислениям. далее в бесконечном цикле от пользователя ожидается нажатие одной из клавиш, соответствующих какой либо формуле. получив её, программа запрашивает у пользователя аргумент и...
C++ оператор выбора помогите пожалуйста сделать эту задачку через switch. Составить программу которая по последней цифре введенного числа должна определять последнюю цифру его куба. https://www.cyberforum.ru/ cpp-beginners/ thread178268.html C++ Задания на написание программ Здравствуйте. Помогите пожалуйста решить следующие задачи (мне к завтрашнему дню надо, а так как поздно пришел домой и есть куча других предметов, вряд ли успею). Заранее спасибо! 1. Гражданин 1 марта открыл счет в банке, вложив N рублей под P процентов годовых. Каждый месяц вклад увеличивался на соответствующий процент, т.е. происходит капитализация. Определить прирост вклада за первый,... https://www.cyberforum.ru/ cpp-beginners/ thread178254.html
Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос C++
Условие: "Нарисуйте граф целых и фундаментальных типов,где от одного типа идёт стрелка к другому,если все значения первого типа могут быть представлены значениями второго в любой реализации,соответствующей стандарту.Нарисуйте такой граф для типов вашей любимой реализации". В google, кроме ссылки на этот форум, ничего дельного не увидел. Данный задача рассматривалась в теме...
C++ в функцию передается два строковых указателя https://www.cyberforum.ru/ cpp-beginners/ thread178235.html
Добрый день! Функции передается два указателя на массив строк. Пользователь вводит строки, необходимо найти количество совпадений второго массива в первом, причем нужно записать указатели на совпадающие элементы в динамически созданный массив указателей. Собственно, на массиве указателей я запутался окончательно. Так же, мне не понятно как освободить память, если нужно вернуть указатель...
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
26.05.2011, 19:32 0

Списки, стеки, очереди - C++ - Ответ 1693182

26.05.2011, 19:32. Показов 77536. Ответов 53
Метки (Все метки)

Лучший ответ Сообщение было отмечено как решение

Решение

Не по теме:

[UP]


Упрощенные до минимума шаблоны контейнеров с итераторами. Для примера или для "лаб" вполне сгодятся.
Длинный
двусвязный список с итератором.

C++
1
2
3
4
5
6
7
8
9
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// базовый класс элемента связного списка
// так же содержит некоторую логику
struct node_base_ {
  node_base_ *next; // указатель на следующую запись
  node_base_ *prev; // указатель на предыдущую запись
  // при создании без параметров, поля указывают сами на себя
  node_base_() : next(this), prev(this) {}
  // при задании параметров, реализует "вставку" элемента в список
  node_base_(node_base_ *next_, node_base_ *prev_)
    : next(next_), prev(prev_) {
    prev_->next = this;
    next_->prev = this;
  }
  // при удалении элемента удаляет разрыв в списке
  virtual ~node_base_() {
    prev->next = next;
    next->prev = prev;
  }
};
 
// шаблонная структура элемента связного списка
template <class Tp_>
struct node_: public node_base_ {
  Tp_ value;  // содержимое элемента
  // конструктор, вызывает базовый
  node_() : node_base_() {}
  // конструктор с параметрами, вызывает базовый
  node_(node_base_ *next_, node_base_ *prev_, const Tp_ &value_)
    : node_base_(next_, prev_), value(value_) {}
};
 
// шаблонный класс итератора двусвязного списка
template <class ValueType,
          class Pointer = ValueType*, class Reference = ValueType&>
class iterator_base_ {
 public:
  typedef ValueType  value_type;
  typedef Pointer    pointer;
  typedef Reference  reference;
  typedef node_base_ node_base;
  typedef node_<value_type> node;
  iterator_base_() : data_(0) {}
  iterator_base_(node_base *data) : data_(data) {}
  // приведение к типу node для реализации вставки элемента 
  // (допущение для упрощения)
  operator node*() { return (node*)data_; }
  iterator_base_ &operator++() {
    data_ = data_->next;
    return *this;
  }
  iterator_base_ operator++(int) {
    iterator_base_ result(data_);
    data_ = data_->next;
    return result;
  }
  iterator_base_ &operator--() {
    data_ = data_->prev;
    return *this;
  }
  iterator_base_ operator--(int) {
    iterator_base_ result(data_);
    data_ = data_->prev;
    return result;
  }
  iterator_base_ operator-(int count) {
    iterator_base_ result(data_);
    while (count--) --result;
    return result;
  }
  iterator_base_ operator+(int count) {
    iterator_base_ result(data_);
    while (count--) ++result;
    return result;
  }
  bool operator==(const iterator_base_ &other) const {
    return data_ == other.data_;
  }
  bool operator!=(const iterator_base_ &other) const {
    return data_ != other.data_;
  }
  value_type &operator*() { return   ((node*)data_)->value; }
  value_type *operator->() { return &((node*)data_)->value; }
 private:
  node_base *data_;
};
 
template <class ValueType>
class list {
 public:
  typedef ValueType value_type;
  typedef ValueType& reference;
  typedef node_<value_type> node;
  typedef node_base_ node_base;
  typedef iterator_base_<value_type> iterator;
  list() : data_(new node_base()) {}
  ~list() {
    clear();
    delete data_;
  }
  int size() const {
    int result = 0;
    for (iterator i = begin(); i != end(); ++i)
      ++result;
    return result;
  }
  bool empty() {
    return (data_->next == data_ && data_->prev == data_);
  }
  void clear() {
    while (!empty()) delete data_->next;
  }
  reference back() { return *(end() - 1); }
  reference front() { return *begin(); }
  iterator begin() const { return data_->next; }
  iterator end() const { return data_; }
  iterator insert(iterator before, const value_type &value) {
    return new node((node_base_*)before, ((node_base_*)before)->prev, value);
  }
  iterator find_first(const value_type &what) {
    iterator result = begin();
    while (result != end() && *result != what)
      ++result;
    return result;
  }
  iterator erase(iterator what) {
    iterator result = what + 1;
    delete (node*)what;
    return result;
  }
  // erases elements in range [begin, end)
  iterator erase(iterator begin, iterator end) {
    while (begin != end)
      begin = erase(begin);
    return begin;
  }
  iterator push_back(const value_type &value) {
    return insert(end(), value);
    //return new node(data_, data_->prev, value);
  }
 private:
  node_base *data_; // элемент, находящийся "перед" списком и сразу
                    // "за" списком
};
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "ilist.h"
#include <cstdio>
 
int main_(int argc, char *argv[]) {
  list<int> lst;
  for (int i = 0; i < 10; ++i)
    lst.push_back(i);
  lst.insert(lst.end() - 2, 10);
  lst.erase(lst.end() - 3);
  lst.erase(lst.find_first(4), lst.find_first(5) + 1);
  list<int>::iterator j = lst.begin();
  while (j != lst.end())
    printf("%d\n", *(j++));
  printf("Size: %d\n", lst.size());
  return 0;
}

Совсем короткий
вектор с итератором.
C++
1
2
3
4
5
6
7
8
9
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
template <class ValueType>
class vector {
 public:
  typedef ValueType  value_type;
  typedef ValueType* pointer;
  typedef ValueType& reference;
  typedef pointer iterator;
  vector() : begin_(0), end_(0), end_of_storage_(0) {}
  ~vector() { delete [] begin_; }
  void clear() { end_ = begin_; }
  bool empty() const { return begin_ == end_; }
  int size() const { return end_ - begin_; }
  void reserve(int new_size) {
    if (new_size > size()) {
      pointer new_begin = new ValueType[new_size];
      pointer new_end = new_begin;
      for (iterator i = begin(); i != end(); ++i) *new_end++ = *i;
      delete [] begin_;
      begin_ = new_begin;
      end_ = new_end;
      end_of_storage_ = begin_ + new_size;
    }
  }
  iterator begin() const { return begin_; }
  iterator end() const { return end_; }
  reference front() const { return *begin_; }
  reference back() const { return *(end_ - 1); }
  iterator erase(iterator what) {
    for (iterator i = what; i != end() - 1; ++i)
      *i = *(i + 1);
    --end_;
    return what;
  }
  reference at(int position) const { return begin_[position]; }
  iterator insert(iterator before, const value_type &value) {
    if (end_ == end_of_storage_) reserve(size() + 5);
    ++end_;
    for (iterator i = end() - 1; i != before; --i)
      *i = *(i - 1);
    *before = value;
    return before;
  }
  iterator push_back(const value_type &value) {
    if (end_ == end_of_storage_) reserve(size() + 5);
    *end_++ = value;
    return end_ - 1;
  }
  reference operator[](int position) const { return begin_[position]; }
 private:
  pointer begin_;
  pointer end_;
  pointer end_of_storage_;
};
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "ivector.h"
#include <cstdio>
int main(int argc, char *argv[]) {
  vector<int> v;
  for (int i = 0; i < 10; ++i)
    v.push_back(i);
  v.erase(v.begin() + 1);
  v.insert(v.begin() + 1, 1);
  for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
    printf("%4d", *i);
  printf("\n");
  for (int i = 0; i < v.size(); ++i)
    printf("%4d", v[i]);
  printf("\n");
  return 0;
}


Вернуться к обсуждению:
Списки, стеки, очереди C++
10
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2011, 19:32
Готовые ответы и решения:

Списки. Стеки. Очереди
Квадрат разбит на {4}^{k} равновеликих квадратных клеток. Квадрат перегибается поочередно...

Задача на тему Стеки, очереди, деки, списки, кольца
Программа на вход получает список школьников следующего вида: 9 Иванов 10 Петров ...

Списки, Стеки,Очереди (На сколько кусков распадется оставшаяся часть листа? )
Доброго всем времени суток!! Помогите написать программу: Из листа клетчатой бумаги размером М*N...

Очереди и стеки
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; struct stack { int x; stack...

53
26.05.2011, 19:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2011, 19:32
Помогаю со студенческими работами здесь

C++ Стеки, Очереди
Дан целочисленный массив размера N. Преобразовать его, прибавив к нечетным числам последний...

Стеки и очереди
Ребят, помогите справится с заданием. Задача 6. Система состоит из процессора P, трёх очередей...

Стеки, очереди, массивы
Помогите реализовать стек с помощью двух очередей, используя массивы (операции удаления,...

Динамические структуры: стеки и очереди
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru