С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Непонятки после php - C++

21.08.2013, 14:12. Просмотров 1040. Ответов 38
Метки нет (Все метки)

1)После php очень трудно понять что такое указатели и зачем они нужны, можете обьяснить?
2)Если вначале выполнения программы мне не известно размер массива, и даже потом его размер будет неизвестен(например какой та парсинг).Что делать?
3)Какую книжку вы бы могли посоветовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 14:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятки после php (C++):

После какого уровня c++ начинать изучать php - C++
Народ снова здравствуйте у меня снова вопрос вообщем я хочу изучить C++ и PHP хотел одновременно но на форуме мне сказали изучай сперва...

непонятки с Си - C++
вобщем вот что задали Вот что я зделал при выполнении пишет s=none(или nane-как то так)/почему так?где ошибка? у кого то так же...

непонятки - C++
у меня есть прога которая берет дабл и разделяет его на две сост. целое и дробное this->z = int(d); this->p = ( d - int(d)...

непонятки с for - C++
Издавна мучает вопрос почему некоторые используют в цикле for ( int i = n; i < m ; i++), а другая часть населения for ( int i = n; i < m ;...

Непонятки с указателями - C++
#include <iostream> using namespace std; int is_order(const int* array) { for(const int* z = array; z < array +...

непонятки с указателями - C++
Добрый день! изучаем плюсы, наткнулся на одну странную ситуацию, не могу сообразить, в чём дело... :( Есть структура - Point...

38
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,389
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 15:04 #16
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
и ЧО???
Если нужен массив - обычно советуют именно массив (вектор), а не сплетение из указателей, разбросанное по всему heap'у.
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
21.08.2013, 15:10 #17
Цитата Сообщение от Kastaneda Посмотреть сообщение
Если нужен массив - обычно советуют именно массив (вектор), а не сплетение из указателей, разбросанное по всему heap'у.
Готов спорить, что ТСу плевать на расположение своих данных в heape
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
21.08.2013, 15:17 #18
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
и ЧО??? Читай C. Мейерс - Эффективное использование STL и подобные учебники. Читай, зубри, пока не осознаешь.

Но сначала прочитай ещё раз мои посты в теме!
Особенно последний, в котором я написал, что в 90% случаев начинающий программист задаёт вопрос про МАССИВ, несмотря на то, что ему абсолютно наплевать на расположение этих данных в памяти. Он тупо не в курсе о существовании других контейнеров, поэтому спрашивает про "массив".
И поэтому я хочу ему помочь именно в этой теме.
Преимущество вектора в гарантированном константом доступе до н-ого елемента.То есть,обращение a[i] исполняется за O(1),в отличии от списков,где доступ к элементам O(n)
0
lesromand
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 98
21.08.2013, 15:32  [ТС] #19
Еще такой вопрос:
Есть класс Human например.
Какова разница между определением его как:
C
1
Human i;
И
C
1
Human i = new Human;
И еще, что будет если написать так:
C
1
int i = new Human;
Т.е тип переменной не будет соответствовать классу.
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
21.08.2013, 15:34 #20
Цитата Сообщение от fatalis Посмотреть сообщение
Преимущество вектора в гарантированном константом доступе до н-ого елемента.То есть,обращение a[i] исполняется за O(1),в отличии от списков,где доступ к элементам O(n)
Садись пять!
А ты знаешь, что за задача у автора???
В огромном числе задач от контейнера требуется только последовательный перебор элементов с помощью итераторов без намёка на произвольный доступ.
Смотрите, наконец! Автор не знает, что такое указатели! Вы все действительно считаете, что он пишет какой-то алгоритм, требующий произвольного доступа от контейнера??? Да перебор элементов в цикле - максимум, чем ограничиваются подобные программы! Автор сам не знает, какой контейнер ему нужен. Ему нужно "подобие массива", обладающее свойствами
1) хранить данные
2) динамически изменять размер.
Ни о каких свойствах, специфичных массиву, автор не упоминал.

Что вы все прицепились к его словам про "массив"?
Я вам гарантирую, что под словом массив он подразумевал вообще "какой-то контейнер".
И раз уж придираетесь упоминанию того, что нужен "массив", то я вам скажу, что vector не обладает всеми свойствами массива. В частности, указатели/ссылки на его элементы перестают быть валидными, после некоторых операций над вектором. Но речь не об этом же!

А вы понять никак не можете...
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
21.08.2013, 15:47 #21
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Садись пять!
А ты знаешь, что за задача у автора???
В огромном числе задач от контейнера требуется только последовательный перебор элементов с помощью итераторов без намёка на произвольный доступ.
Смотрите, наконец! Автор не знает, что такое указатели! Вы все действительно считаете, что он пишет какой-то алгоритм, требующий произвольного доступа от контейнера??? Да перебор элементов в цикле - максимум, чем ограничиваются подобные программы! Автор сам не знает, какой контейнер ему нужен. Ему нужно "подобие массива", обладающее свойствами
1) хранить данные
2) динамически изменять размер.
Ни о каких свойствах, специфичных массиву, автор не упоминал.

Что вы все прицепились к его словам про "массив"?
Я вам гарантирую, что под словом массив он подразумевал вообще "какой-то контейнер".
И раз уж придираетесь упоминанию того, что нужен "массив", то я вам скажу, что vector не обладает всеми свойствами массива. В частности, указатели/ссылки на его элементы перестают быть валидными, после некоторых операций над вектором. Но речь не об этом же!

А вы понять никак не можете...
Какой контейнер выбрать - приходит с опытом.И советовать новичку в С++ использовать листы и деки после php - не лучший выбор.Вектор,в свою очередь,можно назвать удобным массивом.(с некоторыми оговорками)
0
Croessmah
21.08.2013, 15:52
  #22

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А ты знаешь, что за задача у автора???
Вы этого тоже не знаете, если что
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Автор не знает, что такое указатели!
Поэтому перебирать итераторы ему будет легче, чем просто vec[index]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я вам гарантирую, что под словом массив он подразумевал вообще "какой-то контейнер".
Перед тем как ракеты падают, кто-то дает гарантию, что эта ракеты взлетит
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В частности, указатели/ссылки на его элементы перестают быть валидными, после некоторых операций над вектором.
На то он и динамический
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но речь не об этом же!
ВОТ ИМЕННО!

0
lesromand
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 98
21.08.2013, 15:55  [ТС] #23
Цитата Сообщение от lesromand Посмотреть сообщение
Еще такой вопрос:
Есть класс Human например.
Какова разница между определением его как:
C
1
Human i;
И
C
1
Human i = new Human;
И еще, что будет если написать так:
C
1
int i = new Human;
Т.е тип переменной не будет соответствовать классу.
И еще:
Не всегда массив будет иметь элементы одного типа, скорее наоборот.
Как это сделать?Через вектор?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 16:12 #24
Цитата Сообщение от Croessmah Посмотреть сообщение
delete освобождает память, ранее выделенную new, но не удаляет указатель.
Цитата Сообщение от lesromand Посмотреть сообщение
Освобождает память но не удаляет, это как?Оно в воздухе тогда хранится?
Удаляет память, адрес которой хранится в указателе, но сам указатель при этом не удаляется.

Добавлено через 9 минут
C++
1
Human *i = new Human; // new возвращает указатель, поэтому и присваивать его нужно указателю
Добавлено через 4 минуты
Цитата Сообщение от lesromand Посмотреть сообщение
И еще, что будет если написать так:
int *i = new Human;
Не скомпилируется.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.08.2013, 16:16 #25
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В огромном числе задач от контейнера требуется только последовательный перебор элементов с помощью итераторов без намёка на произвольный доступ.
И в этом деле вектор гораздо быстрее дека/списка. Вы же вроде бы знаете ассемблер и имеете представление о кеше/префетчинге?
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
21.08.2013, 16:23 #26
Цитата Сообщение от lesromand Посмотреть сообщение
2)Если вначале выполнения программы мне не известно размер массива, и даже потом его размер будет неизвестен(например какой та парсинг).Что делать?
Нужно заранее выделять ячейку допустим на 1000 символов и работать с таким массивом, хоть текст спарсеный будет на 100 символов хоть на 1100. Просто остальные не добавятся.
Вообще используй для парсера контейнер string.

Php это сила а не язык, там указатели и нафиг не нужны как и в остальных языка высокого уровня, это токо в Си/С++ указатели остались - это привет от ассемблера, говорит о том что С++ не такой уж и высокоуровневый язык.

Вообще С++ учить после php не сложно, у них синтаксис схожий. Только некоторые темы которых нету в php придется изучить, там указатели, шаблоны, ООП в С++ не такой как в пхп в С++ он побагаче - функциональнее.

Честно скажу С++ тяжелее выучить в разы чем пхп, если пхп я за год знал на уровне эксперта, то С++, я щас год и 7 месяцев учу и мне кажется до среднего уровня недотягиваю. Короче сложно учить, хотя подумать что в себя С++ включает: основные операторы что и во всех языках( там циклы и всякая фигня), шаблоны, указатели, ооп и стл. Утето от 5 тем разобрать и все язык знаешь.
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
21.08.2013, 16:38 #27
Цитата Сообщение от diagon Посмотреть сообщение
И в этом деле вектор гораздо быстрее дека/списка. Вы же вроде бы знаете ассемблер и имеете представление о кеше/префетчинге?
Суть выбора контейнера была в первую очередь в быстром динамическом расширении размера. Скорость доступа это дело десятое, я просто обратил внимание, что если не требуется произвольный доступ, то тем более надо брать дек в качестве расширяемого контейнера.
0
Kastaneda
21.08.2013, 16:41
  #28

Не по теме:

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

0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
21.08.2013, 16:49 #29
Цитата Сообщение от Kastaneda Посмотреть сообщение
А если не требуется произвольный доступ, но требуется быстрый перебор?
а если требуется быстрое расширение и не требуется быстрых ни перебора ни доступа?
0
Kastaneda
21.08.2013, 16:54     Непонятки после php
  #30

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а если требуется быстрое расширение и не требуется быстрых ни перебора ни доступа?
Ну тогда вектор проигрывает, да. А что б выбрать между другими контейнерами недостаточно требований.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 16:54
Привет! Вот еще темы с ответами:

Непонятки с функциями - C++
Добрый день. Я новичек в программировании и вот вопрос: Хочу написать функцию, например: void __fastcall...

непонятки с делением:( - C++
Вот возникла такая проблемка...надо поделить числа так, что бы бралось полное цело число...т.е.: при деление 5:2=2.5=> программа выводит...

Непонятки с рандомом - C++
Не могу понять из-за чего рандом в классе повторяется. Есть такой код генерации пароля... class Pas { string symbols; ...

Непонятки со scanf - C++
char str_check; //строка для функции "check", которая проверяет введенные данные { scanf("%s",&str_check); } выскакивает...


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

Или воспользуйтесь поиском по форуму:
30
21.08.2013, 16:54
Ответ Создать тему
Опции темы

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