Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 28.09.2014
Сообщений: 14

Динамическое выделение памяти для Вектора ( не STL)

09.10.2014, 06:57. Показов 3830. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет Ребят,
Задание таково, прога читает слова из файла и в зависимости от выбора опций показывает мне количество уникальных слов, общее количество и печатает мне их в алфавитном порядке.
Когда массив содержал 1000 элементов, все работало, но нужно сделать динамическое выделение памяти,
компилируется, но воспроизвести не могу, Сделан Дамп памяти..
Подскажите, что не так?
скорее всего ошибка в моей insert function

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
#ifndef VECTOR_H
#define VECTOR_H
 
template < class T > class Vector
{
public:
  typedef T *iterator;
  Vector ()
  {
  used =0;cap=2;p=0;
  }
  iterator begin ()
  {
 
  return iterator(p);
  }
  iterator end ()
  {
  return iterator(p+used);
  }
  int size ()
  {
   return used;
  }
 
 
 iterator insert (iterator position, const T & item)
  {
   if(!p)
        {
            cap = 2;
            p = new T[cap];
 
        }
        else if(cap == used) 
        {
            cap = int(cap * 2);
            T* tmp = new T[cap];
            for(int i = 0; i < used; ++i)
            {
                tmp[i] = p[i];
            }
            delete[] p;
            p = tmp;
        }
 
 
 for ( iterator i = end() ; i != position; --i ) 
  *i = *( i - 1 );
  used++;
  *position = item;
 
   return position;
 
 
  
  
  }
private:
  T *p;
  int used;
  int cap;
  
};
 
#endif /* VECTOR_H */
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <iostream>
#include <unistd.h>
#include <string>
//#include <vector>
//#include <algorithm>
#include "Vector.h"
 
 
using namespace std;
 
 
struct WordInfo
{
  int count;
  string text;
};
WordInfo myText;
Vector < WordInfo > uniq;
 
Vector < WordInfo >::iterator find (Vector < WordInfo >::iterator start,
                    Vector < WordInfo >::iterator stop,
                    string value);
 
 
int
main (int argc, char **argv)
{
 
  enum
  { total, unique, diff } mode = total;
  for (int c; (c = getopt (argc, argv, "tui")) != -1;)
    {
      switch (c)
    {
    case 't':
      mode = total;
      break;
    case 'u':
      mode = unique;
      break;
    case 'i':
      mode = diff;
      break;
    }
    }
  argc -= optind;
  argv += optind;
  string word;
  Vector < WordInfo >::iterator it;
  // Vector < WordInfo >::iterator kit = uniq.begin ();
  //       myText.text = "www";
  // myText.count = 1;
  // uniq.insert (kit, myText);
  // int count = 0;
  int s = 0;
 int totally=0;
 
  while (cin >> word)
    {
      if (uniq.size () == 0)
    {
      myText.count = 1;
      myText.text = word;
        
      uniq.insert (uniq.begin (), myText);
    }
      else
    {
 
 
      Vector < WordInfo >::iterator pit = uniq.begin ();
 
      it = find (uniq.begin (), uniq.end (), word);
 
 
      if (it == uniq.end ())    // заходит в условие если возвращает true нашел такого слова
        {
 
        
          myText.text = word;
          myText.count = 1;
          while (pit != uniq.end ())
        {
          
          if (word.compare ((pit->text)) > 0)
            {
              pit++;
              if ((pit->text) == "")
            {
              uniq.insert (pit, myText);pit = uniq.end ();
            }
 
 
            }
 
 
          else
            {
              uniq.insert (pit, myText);
              pit = uniq.end ();
            }
        }
 
        }
 
 
 
 
      else
        {
          (it->count)++;
 
        }
 
    }
    }
 
 
 
 
 
 
 
  switch (mode)
    {
    case total:
       
       for (Vector < WordInfo >::iterator i = uniq.begin ();
       i < uniq.end (); i++)
    {
      totally=totally+(i->count);
 
 
    }
      cout << "Total: " << totally << endl;
      break;
    case unique:
      cout << "Unique: " << uniq.size () << endl;
      
      break;
    case diff:
 
      for (Vector < WordInfo >::iterator i = uniq.begin ();
       i < uniq.end (); i++)
    {
      cout << i->text << ": " << i->count << endl;
 
 
    }
 
      break;
    }
}
 
Vector < WordInfo >::iterator find (Vector < WordInfo >::iterator start,
                    Vector < WordInfo >::iterator stop,
                    string value)
{
  Vector < WordInfo >::iterator i = start;
  while (i != stop && (i->text) != value)
    ++i;
  return i;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2014, 06:57
Ответы с готовыми решениями:

Динамическое выделение памяти для массива
Кто может помочь решить задачу. Для заданного двумерного массива из n строк и m столбцов вывести на экран следующее меню операций: ...

Динамическое выделение памяти для массива
Не могу разобраться, почему программа вызывает точку остановы после выбора действия в функции, причем не показывает, где. Она происходит...

Динамическое выделение памяти для структур
Добрый день. Есть следующие структуры: typedef struct __attribute__((aligned(16))) { float u, v; unsigned int color; ...

8
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
09.10.2014, 08:35
без комментов и с таким оформлением...желание отпало как-то...
0
0 / 0 / 1
Регистрация: 28.09.2014
Сообщений: 14
09.10.2014, 09:10  [ТС]
dzrkot, Вам трудно глянуть на одну функцию?
Программа очень проста,
Я не знаю, о каком оформлении идет речь и комментов нет, т к это лабораторная была, не сдаем ее.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
09.10.2014, 09:16
Цитата Сообщение от Beaal Посмотреть сообщение
Я не знаю, о каком оформлении идет речь
миллион '\n' режут глаз, не компактно
Цитата Сообщение от Beaal Посмотреть сообщение
Вам трудно глянуть на одну функцию?
я глянул,я не вижу ошибку.

Не по теме:

Цитата Сообщение от Beaal Посмотреть сообщение
Программа очень проста,
так почему вы задаете тогда вопросы, делайте сами

0
0 / 0 / 1
Регистрация: 28.09.2014
Сообщений: 14
09.10.2014, 09:26  [ТС]
dzrkot, я всегда делаю автоматическое форматирование через терминал..
с миллионами \n мне легче понимать код,

В любом случае спасибо, что хотя бы посмотрели.

Не по теме:

сделала сама, сколько смогла

0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
09.10.2014, 09:30
Цитата Сообщение от Beaal Посмотреть сообщение
с миллионами \n мне легче понимать код,
старайтесь делать компактнее
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
09.10.2014, 09:48
Цитата Сообщение от dzrkot Посмотреть сообщение
так почему вы задаете тогда вопросы, делайте сами
так почему тебе мешает оформление? Программа действительно небольшая!

Добавлено через 1 минуту
Цитата Сообщение от Beaal Посмотреть сообщение
Подскажите, что не так?
https://ru.wikipedia.org/wiki/... 8%D0%B5%29
деструктор, конструктор копирования, оператор присвоения.
Где они?
0
09.10.2014, 09:51

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
так почему тебе мешает оформление? Программа действительно небольшая!
не выспался, зол)

0
0 / 0 / 1
Регистрация: 28.09.2014
Сообщений: 14
09.10.2014, 11:14  [ТС]
Kuzia domovenok,
спасибо, почитаю, попробую дописать
Дело в том, что понятия деструктор нам не давали и тем более конструктор копирования, оператор присвоения..
Я не очень знаю, как и писать, и использовать, и в чем их суть..
погуглю, спасибо )
даже если без них, я для начала проверяю элементарно в файлом в несколько строк,
вероятно у меня где-то итераторы пытаются выйти за границы вектора, но логика проста, как только размер вектора равен количеству уже имющихся эл-ов, я увеличиваю его размер, т е создаю указатель на бОльший вектор, переписываю туда все, удаляю устарый и меняю указатель на новый бОльший вектор..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2014, 11:14
Помогаю со студенческими работами здесь

Динамическое выделение памяти для строки
Подскажите, пожалуйста , почему в данной программе появляются ошибки в строке return Vector(v1.x + v2.x, v1.y + v2.y, v1.cp +...

Динамическое выделение памяти для строки
Добрый день. Такой вопрос возник: При создании строки с помощью указателя на char и ввода с помощью cin значения, то есть char *x; ...

Динамическое выделение памяти для массива
Допустим следующее: Имеется массив типа структуры struct stct buf1 Далее массив по ходу выполнения программы заполняется необходимой...

Динамическое выделение памяти для матрицы
Программа выглядит так. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; typedef int *pInt; int main() { int N, M, i, j; pInt *A; ...

Динамическое выделение памяти для массива
Есть лаба, задание скриншотом ниже. Я вроде бы как сделал его, но вот второй массив который я использую что бы не терять данные с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru