Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Delmellor
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
#1

Динамические массивы разных размеров - C++

31.03.2013, 14:32. Просмотров 495. Ответов 9
Метки нет (Все метки)

Дан файл вида, например, такого:
9
7
5 -5 7 3 -6 9 2
1 13 6 2 -4
42 -13 3 0 5 8 -11
4 -11 3 8 -5 2 3
5 -3 9
3 5 -2 1 0 0 23
6 9 9 5 17 -13
5 3 -4 21 4 3 15
-20 5 3 -6

7 — это N — сколько координат может быть у вектора. Векторы вида x=(X1, X2, …, Xk), k<=N.
9 — это количество имеющихся векторов.
Т.е. в первой строке количество векторов, во второй — сколько может быть максимум координат, а дальше пошли сами векторы.

Мне нужно в динамический массив V размером 9 записать эти векторы; а размер каждого из субмассивов (координаты каждого вектора) равен k, где k — кол-во координат текущего вектора.
Хочу считывать строки, потом ячейке массива V присваивать массив размера = кол-ву координат.

Проблема в том, что не знаю, как объяснить, что у нас строка закончилась. Пробовал метод get у входного потока (типа while read.get()!="\n") — не подходит, т.к. у нас числа, а этот get знак минуса отдельно хавает.

Добавлено через 11 минут
В принципе, сколько векторов — неважно... напишу while (!read.eof()) и всё. Главное — чтобы можно было при переходе на следующую строку:
1) узнать, сколько в ней чисел (k штук)
2) ячейке массива векторов присвоить динамический массив размера k.
3) и заполнить его числами этими (координатами).

Нельзя использовать vector, set и т.п... реализовать нужно всё строго через динам. массивы (просто само задание на ссылочный тип данных).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 14:32     Динамические массивы разных размеров
Посмотрите здесь:

Динамические массивы - C++
Добрый вечер, у меня в программе есть динамический массив, в котором, если записать туда &gt;20 элементов, все элементы перемешиваются, но...

Динамические массивы - C++
Суть задания такова. Создается динамический массив А, заполняется элементами. Затем создается массив B, куда записываются все элементы...

Динамические массивы - C++
Если у меня есть 2 двумерных динамических массива один х1 размерностью m*n, а другой х2 размерностью m*(n+1), то что происходит с ними...

Динамические массивы - C++
Попытался поработать с дин. массивами, почему то ошибка появляется,может подскажете в чем проблема #include &quot;iostream&quot; using...

Динамические массивы - C++
пишу функции по сложению умножению делению и вычитанию полиномов void sub(){ int x,y; cout&lt;&lt;&quot;vvod stepeni A(x): &quot;; ...

Динамические массивы - C++
#include &lt;iostream&gt; using namespace std; int main() { int num; cout &lt;&lt; &quot;Ââåäèòå öåëîå ÷èñëî: &quot; &lt;&lt; num; int...

Динамические массивы. - C++
Помогите пожалуйста сделать задачку. В ней должно быть меню, и использованы динамические массивы. В меню 3 пункта: 1. Преобразуйте...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
2593 / 1815 / 260
Регистрация: 08.06.2007
Сообщений: 6,960
Записей в блоге: 4
31.03.2013, 14:37     Динамические массивы разных размеров #2
Вы через потоки читаете? Т. е. ifstream
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
31.03.2013, 14:39     Динамические массивы разных размеров #3
считывать числа построчно
C++
1
getline(ifst,str);
разбивать строки на составляющие цифры через istringstream например
C++
1
2
3
4
5
6
7
8
9
#include <sstream>
istringstream iss(str)
while(iss)
{
 
    int temp;
    iss >> temp;
    //добавить в i-ый элемент вытащенное число temp
}
Delmellor
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
03.04.2013, 04:59  [ТС]     Динамические массивы разных размеров #4
Tiva, спасибо большое; то, что нужно. Почти.
Вопрос ещё в том, как узнать, сколько чисел в строке. Ну вот сгетлайнил, и мне нужно же создать массив определенного размера (k чисел) — как получить k?

Добавлено через 4 часа 28 минут
Есть способ?

Добавлено через 8 часов 49 минут
? [поднимаю]
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
03.04.2013, 05:20     Динамические массивы разных размеров #5
Цитата Сообщение от Delmellor Посмотреть сообщение
Динамические массивы разных размеров
А зачем размер упомянут? Динамический массив по определению есть массив, не определяющий своего размера в момент декларации и получающий его в рантайме по потребности. А потребность в размерах нескольких массивов в общем случае может не совпадать. Или в данном случае речь о неравенстве верхней планки, типа один массив имеет
C++
1
uint8_t count;
, у второго
C++
1
uint16_t count;
, у третьего
C++
1
uint32_t count;
, а у четвёртого
C++
1
size_t count;
?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.04.2013, 06:51     Динамические массивы разных размеров #6
Как вариант. Выведет количество чисел, расположенных через пробел, в каждой строке файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ifstream fin("2.txt");
int N = 0;
while (fin.peek() != EOF)
{
    int temp;
    fin >> temp;
    ++N;
    if (fin.peek() == '\n' || fin.peek() == EOF)
    {
        cout << N << endl;
        N = 0;
    }
}
Добавлено через 12 минут
Или способом, который предложил Tiva, но с подсчётом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while (!fin.eof())
{
    string str;
    getline(fin, str);
    istringstream iss(str);
        
    int N = 0;
    while(iss)
    {
        int temp;
        iss >> temp;
        if (iss)
        ++N;
    }
    cout << N << endl;
}
Delmellor
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
09.04.2013, 15:09  [ТС]     Динамические массивы разных размеров #7
Эх...
Мне нужно вот что:
Узнавать, сколько в строке чисел, потом "тут же, не считывая их", объявлять массив этого размера, а уже потом в него их заносить. Т.е. чтобы можно было написать цикл for (i=0; i<K; i++) fin>>А[i] ;; у А размер K, который мы уже узнали.
Т.е. всё сводится к тому, чтобы как-то "вернуться назад" после подсчёта количества чисел в строке.
И в массиве этом созданном должно быть ровно K элементов — ни больше, ни меньше.

Добавлено через 12 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
А зачем размер упомянут? Динамический массив по определению есть массив, не определяющий своего размера в момент декларации и получающий его в рантайме по потребности. А потребность в размерах нескольких массивов в общем случае может не совпадать. Или в данном случае речь о неравенстве верхней планки
Да, речь о неравенстве верхней планки.
Цитата Сообщение от taras atavin Посмотреть сообщение
получающий его в рантайме по потребности
Именно так всё и должно произойти — узнаём верхнюю планку, создаём массив длины K, заполняем его значениями из строки с K значениями.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 15:17     Динамические массивы разных размеров #8
Цитата Сообщение от Delmellor Посмотреть сообщение
Узнавать, сколько в строке чисел, потом "тут же, не считывая их", объявлять массив этого размера, а уже потом в него их заносить.
Это нужно делать для каждой строки в файле?

Добавлено через 6 минут
Если да, то файл всё равно придётся два раза проходить. Поэтому, создаёте вектор интов, проходите файл, как описано выше, количество чисел в каждой строке помещаете в вектор, закрываете файл (или перемещаете курсор в начало), снова открываете, берёте последовательно числа из вектора, создаёте массивы нужного размера, читаете туда числа из строк (сколько из в каждой строке уже будете знать).
Delmellor
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
09.04.2013, 15:27  [ТС]     Динамические массивы разных размеров #9
Спасибо, то, что нужно.

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
или перемещаете курсор в начало
Как это сделать?

В принципе, не знаю и того, как "заново открыть файл" — ещё раз объявить переменную ifstream?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 16:43     Динамические массивы разных размеров
Еще ссылки по теме:

Динамические массивы - C++
помогите выполнить задание #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; void main() { int...

Динамические массивы - C++
Объясните пожалуйста что такое динамические массивы. Это массивы с не константным количеством элементов? Если так, то как их объявлять?

динамические массивы - C++
помогите, пожалуйста, написать код в с++. (пример кода) Дана матрица размера A * B. Вывести ее элементы в следующем порядке: первый...

Динамические массивы - C++
1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать 2. Выполнить указанное в варианте...

Динамические массивы - C++
1. Добавить после каждого четного элемента элемент со значением 0 2. Добавить столбец в конец матрицы :-[пожалуйста


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 16:43     Динамические массивы разных размеров #10
Цитата Сообщение от Delmellor Посмотреть сообщение
Как это сделать?
C++
1
2
fin.clear();
fin.seekg(0);
Добавлено через 3 минуты
Размер вектора с интами, будет равен количеству строк в файле, поэтому второй раз можно читать не до конца файла, а в цикле (так проще).
Yandex
Объявления
09.04.2013, 16:43     Динамические массивы разных размеров
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru