![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Faust666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 28.3.2008 Репутация: нет Всего: нет |
Задан вектор A , максимальный размер 100 элементов. Элементами вектора являются целые числа.
Файл имеет следующую структуру: • N – число элементов в векторе А; • строка или строки, содержащие значения элементов вектора А; Необходимо ввести этот массив из файла, нигде не могу найти конкретного примера, до С++ изучал только паскаль, там все делалось 1 функцией и простым циклом, в С++ же нашел на эту тему с десяток различных функций, но так и не понял как с ними работать. Прошу привести элементарный пример этой реализации. |
|||
|
||||
Mephisto |
|
||||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Файл:
|
||||
|
|||||
Faust666 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 28.3.2008 Репутация: нет Всего: нет |
Хм, а где в вашем примере массив целых чисел, в который надо производить ввод?
И почему в файле вместо цифр слова? |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Faust666, то был пример как читать из файла.
Вот тебе пример аж с двумя реализациями(писал здесь, могут быть ошибки)
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
inside_pointer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Придумай чо-нибудь как правильно массив создать(там есть какие-то операции типа выделить память и всё такое), этот код работает.
Это сообщение отредактировал(а) archimed7592 - 29.3.2008, 16:55 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
inside_pointer, вот только это не С++
![]() |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
А он основ не знает, не может массив найти, а основы С++ в С
![]()
|
|||
|
||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
||||
|
||||
Graf_h |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: нет Всего: 5 |
и не нужно цыкла for(...); Это сообщение отредактировал(а) Graf_h - 31.3.2008, 09:48 -------------------- Иногда переменная - это просто переменная |
||||
|
|||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Одномерный массив - это не вектор чтоли ?
|
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Нет, конечно ![]() Кстати, если я не ошибаюсь, твой код violates ISO-C++(да, я знаю, что он соответствует C99, но не считаю, что целесообразно учить человека, желающего изучить С++ тем вещам, которые не будут там работать)... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Mephisto |
|
||||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Graf_h, первым числом в файле идет количество элементов в файле!
Его не нужно пихать в сам вектор. А числа которые идут после определенного числа из задания совершенно непонятно что с ними делать! Зачем их в вектор-то пихать? Т.е. если файл:
В векторе должно быть
В задании не сказано что в вектор должны попасть 124 и 125! А тем более 3 |
||||
|
|||||
Graf_h |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: нет Всего: 5 |
Зачем его вообще задавать? В моем варианте алгоритм пластичнее , так как не нужно указывать числа елементов. ы даже когда в файле будет не целочисельное число, алгоритм не даст сбой, а просто перестанет считывать данные. можно конечно еще ловить исключения... но это уже другая история ![]() Mephisto, я его не навязываю, просто показал как можно делать, а то все For да For ![]() -------------------- Иногда переменная - это просто переменная |
||||
|
|||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Graf_h, вот структура файла:
Твой вариант, каким бы пластичным он небыл, но не решает поставленной задачи ![]() |
|||
|
||||
Graf_h |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: нет Всего: 5 |
Mephisto, cмотрите какая красота + проверяет елемент на соответствее типа int. вот вам пластика ![]() P.S програмирование это исскуство Это сообщение отредактировал(а) Graf_h - 31.3.2008, 16:25 -------------------- Иногда переменная - это просто переменная |
||||
|
|||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Я думаю надо учить его определять где массивы, а не с векторов начинать, а что у меня в коде не будет работать ? Я только память не стал выделять. |
|||
|
||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Хорошо что ты так думаешь, но для начала в задании четко сказано что нужен именно вектор! ![]() А на счет массивов вопрос спорный. Я уже и не припомню когда приходилось использовать массивы в чистой форме. Как по мне редкая задача. Оператор [] частенько юзаю, массивы в чистом виде - нет. Хватает векторов, списков, хеш таблиц... Это сообщение отредактировал(а) Mephisto - 1.4.2008, 13:18 |
|||
|
||||
inside_pointer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Так я знаю что вектор это и есть массив, как бы archimed7592 меня не переубеждал.
Так ты и не пишешь задачки типа прочитать числа из файла, для такой простой задачи многа букф, тем более человеку после Паскаля понимать векторы эти, они обычно не знают что массивы с нуля начинаются. Какой смысл ему объективно программировать, если он только начинает, или что прямо есть такой смысл, ничего не понимая писать сложные коды ? тогда как он их будет писать, через копи/пейст ? А ты его спроси он понял хоть одну строчку, или это то же самое что он нашёл до ? |
||||
|
|||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Я пишу собственно сам на дельфине, ничего, массивы тоже не использую. ![]() Объективно хорошо сказано... Задача так стоит, реализовать на СиПиПи вектор с числами, конечно можно человеку тетрис предложить что круче естественно. Знаешь, если не вникать в суть, то копипастить и массивы можно неплохо. ![]()
Это есть решение поставленной задачи, если человек не понял, то пусть задает вопрос что именно не понятно. Можно попробовать и обьяснить. Да, кстати, а где топикстартер? |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Ага. Это фича C99, которой в legacy C++ пока нет.
Я не собираюсь никого переубеждать против их воли: хочется жить в своём узком мирке и категорично отказываться от расширения кругозора - на здоровье. Думаю, что целесообразно дождаться топикстартера и посмотреть что он скажет. Возможно, что его умственные способности не так скромны, как ты пытаешься их выставить, и он отлично понял все строки. В общем разговор ни о чём("а он хотел так", "а ему нужно вместо этого нужно вот это", "а ..."). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
inside_pointer |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Тогда давай ему ассемблер, он как раз научится и будет векторы понимать в самой их сути, я за то чтобы если человек не знает где массив показать ему где массив. А по твоему получается что если он в твоём коде не разберётся, то у него скромные умственные способности, нормально да?
Я имел ввиду функцию malloc(), а не new и delete
Но при этом понимать их легко, потому что у него уже есть опыт работы с ними.
Я за массивы, они надёжные, всегда знаешь сколько памяти он жрёт и всё такое. |
||||||||
|
|||||||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Кто о чём, а... Короче забей. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Рекомендую почитать книжки по С++. В частности, Мейерса и Александреску 101 совет. std::vector - это и есть массив. Собственно, сам вектор содержит три указателя: начало данных, конец данных, конец резерва данных. Это единственная плата за его использование (не считая, что для ускорения работы память выделяется экспоненциально, но резервом можно управлять). Если ты считаешь, что она чрезмерна, то читай еще один совет из той же книги - про преждевременную оптимизацию. кстати, получить доступ к массиву элементов можно так:
|
||||||
|
|||||||
inside_pointer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
Что и требовалось доказать ![]()
Не, для паскалиста, нужно будет ещё книжку купить, потом потратить время на неё, изучая синтаксис, вместо того чтобы сразу записать всё на массивах, а когда нужны указатели на начало и конец, изучить указатели ещё. |
||||
|
|||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
||||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
А он знает массивы уже, вот тебе и вариант, что зная их там он знает их уже здесь.
А чтобы понять запись вектора знаешь сколько времени ему нужно будет на это потратить, а операции с непонятным вектором, а отладка малопонятных операций с непонятным вектором. |
|||
|
||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Кто знает? Если ты не понимаешь векторы, это не означает что весь мир их не понимает. Посмотрел один раз реализацию и стало понятно как они реализованы. Что тут сложного-то. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Опять же, читаем книжки, например С. Мейерс "Эффективное использование STL". Там все написано. Вектор реализуется в виде обычных массивов, доступ к элементам которого очуществляется через указатели. В итоге, скорость работы с ним не ниже, чем с сишными массивами (если, конечно, не включен режим отладки библиотеки STL), а удобство программирования и безопасность итогового кода гораздо выше. |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ну inside_pointer в некоторм смысле прав - непонимание многих вещей в C++ коренится в незнании "как это устроено" на низком уровне. Тупой кодинг (да-да, можете начинать еня пинать прямо здесь) еще прокатит в VB, но C++ слишком близок к железу, что-бы его (железо) игнорировать. Зная основы (которые как правильно было замеано лежат в plain C, и еще глубже - в ассемблере) можно тупую зубрежку непонятных правил заменить глубоким пониманием откуда сии правила проистекают - что в разы сокращает сроки обучения - лучше день потерять, а потом за пять минут долететь.
ЗЫЖ сорри за некрофильство - не обратил внимания на дату ![]() Это сообщение отредактировал(а) J0ker - 2.10.2008, 07:09 |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: -1 Всего: 12 |
да задание по ходу про вектор было, но прощаться с базовыми понятиями тоже нельзя
cpp не идеальный, сейчас там вектор одно завтра другое послезавтра третье кому что короче |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Если пользоваться открытыми интерфейсами, то проблем быть не должно. Есть определенные гарантии поведения вектора. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |