1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
|
|
1 | |
Динамические массивы разных размеров31.03.2013, 14:32. Показов 1147. Ответов 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 и т.п... реализовать нужно всё строго через динам. массивы (просто само задание на ссылочный тип данных).
0
|
|
31.03.2013, 14:32 | |
Ответы с готовыми решениями:
9
Как приравнять динамические одномерные массивы разных размеров друг к другу Динамические массивы и функции. Динамические массивы. Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) Структуры, массивы, указатели, динамические массивы структур |
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
|
|||||||||||
31.03.2013, 14:39 | 3 | ||||||||||
считывать числа построчно
1
|
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
|
|
03.04.2013, 04:59 [ТС] | 4 |
Tiva, спасибо большое; то, что нужно. Почти.
Вопрос ещё в том, как узнать, сколько чисел в строке. Ну вот сгетлайнил, и мне нужно же создать массив определенного размера (k чисел) — как получить k? Добавлено через 4 часа 28 минут Есть способ? Добавлено через 8 часов 49 минут ? [поднимаю]
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||||||||||||
03.04.2013, 05:20 | 5 | ||||||||||||||||||||
А зачем размер упомянут? Динамический массив по определению есть массив, не определяющий своего размера в момент декларации и получающий его в рантайме по потребности. А потребность в размерах нескольких массивов в общем случае может не совпадать. Или в данном случае речь о неравенстве верхней планки, типа один массив имеет
0
|
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||
03.04.2013, 06:51 | 6 | ||||||||||
Как вариант. Выведет количество чисел, расположенных через пробел, в каждой строке файла:
Или способом, который предложил Tiva, но с подсчётом:
1
|
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
|
|
09.04.2013, 15:09 [ТС] | 7 |
Эх...
Мне нужно вот что: Узнавать, сколько в строке чисел, потом "тут же, не считывая их", объявлять массив этого размера, а уже потом в него их заносить. Т.е. чтобы можно было написать цикл for (i=0; i<K; i++) fin>>А[i] ;; у А размер K, который мы уже узнали. Т.е. всё сводится к тому, чтобы как-то "вернуться назад" после подсчёта количества чисел в строке. И в массиве этом созданном должно быть ровно K элементов — ни больше, ни меньше. Добавлено через 12 минут Да, речь о неравенстве верхней планки. Именно так всё и должно произойти — узнаём верхнюю планку, создаём массив длины K, заполняем его значениями из строки с K значениями.
0
|
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.04.2013, 15:17 | 8 |
Это нужно делать для каждой строки в файле?
Добавлено через 6 минут Если да, то файл всё равно придётся два раза проходить. Поэтому, создаёте вектор интов, проходите файл, как описано выше, количество чисел в каждой строке помещаете в вектор, закрываете файл (или перемещаете курсор в начало), снова открываете, берёте последовательно числа из вектора, создаёте массивы нужного размера, читаете туда числа из строк (сколько из в каждой строке уже будете знать).
1
|
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37
|
|
09.04.2013, 15:27 [ТС] | 9 |
Спасибо, то, что нужно.
Добавлено через 2 минуты Как это сделать? В принципе, не знаю и того, как "заново открыть файл" — ещё раз объявить переменную ifstream?
0
|
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
09.04.2013, 16:43 | 10 | |||||
Размер вектора с интами, будет равен количеству строк в файле, поэтому второй раз можно читать не до конца файла, а в цикле (так проще).
1
|
09.04.2013, 16:43 | |
Помогаю со студенческими работами здесь
10
Массив указателей на std::array разных размеров Трехмерный массив, в который можно записать матрицы разных размеров
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |