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

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

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

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

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

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

Не по теме:

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

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

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

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

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

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

Не по теме:

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

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

Не по теме:

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

lesromand
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 98
21.08.2013, 16:54  [ТС]     Непонятки после php #31
Вопрос по массиву:
Код1:
C
1
2
3
4
5
    int a[2];
 
    a[1] = 10000000;
 
    cout<<sizeof(a);
Вывод: 8 (байт).
Код2:
C
1
2
3
    int a[2];
 
    cout<<sizeof(a);
Вывод: 8 (байт).

По логике в первом варианте массив должен быть больше чем 8 байт, поскольку он наполовину заполнен.Во втором варианте показывает так же 8 байт, хотя он пуст.Почему так?

Наверное в память такое значение идет как 4-символьное.
По такой логике получается что каждый элемент массива имеет одинаковый размер, верно?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 16:57     Непонятки после php #32
Цитата Сообщение от lesromand Посмотреть сообщение
Почему так?
sizeof() выдаёт размер выделенной памяти, два int.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.08.2013, 16:59     Непонятки после php #33
Цитата Сообщение от lesromand Посмотреть сообщение
Во втором варианте показывает так же 8 байт, хотя он пуст.
Он условно пуст, на самом деле он содержит мусор. Не помню, как в РНР, но в С/С++ такая запись
C++
1
int a[2];
говорит компилятору, что нужно выделить память под 2 инта. Поэтому размер всегда будет 2 * sizeof(int).
lesromand
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 98
21.08.2013, 17:10  [ТС]     Непонятки после php #34
Ну понятно что размер одного элемента(индекса) int массива будет 4, такое можно даже в php сделать, функция pack.
Но кааак строковый массив может иметь один и тот же размер?
Пример:
C
1
2
3
4
5
string a[2];
 
    a[1] = "10000000asdasdsadsadsadsaddsasddasdasasdasdasdadasdasdasdsadasdasdaksldsadklkasddaslkdsadskadaslkdasldasl";
 
    cout<<sizeof(a);
56 байт
C
1
2
string a[2];
    cout<<sizeof(a);
56 байт

Как такое может быть?Если я впихну текста 2гб то он тоже будет 56 байт?

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
sizeof() выдаёт размер выделенной памяти, два int.
два int он показывает на 1 элемент массива, хотя там 1 число?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 17:12     Непонятки после php #35
Цитата Сообщение от lesromand Посмотреть сообщение
Но кааак строковый массив может иметь один и тот же размер?
Это размер массива объектов типа string, а не количество памяти, которое занимают "записанные" в объекты строки

Добавлено через 50 секунд
Цитата Сообщение от lesromand Посмотреть сообщение
тоже будет 56 байт?
Да, будет. Размер объекта не зависит от того, какую строку Вы в него запихнете.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.08.2013, 17:12     Непонятки после php #36
Цитата Сообщение от lesromand Посмотреть сообщение
a[1] = "10000000asdasdsadsadsadsaddsasddasdasasdasdasdadasdasdasdsadasdasdaksldsadklkasddaslkdsadskadaslkdasldasl";
а ты напиши свой собственный класс строки, и поймёшь, почему у него фиксирован размер.



и вообще, что за убеждённость в том, что память не нужно выделять? Под все переменные в программе выделяется память! автоматически на стеке это происходит или с помощью оператора new, но откуда убеждённость, что память можно выделять одновременно с присвоением???
lesromand
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 98
21.08.2013, 17:13  [ТС]     Непонятки после php #37
Цитата Сообщение от Croessmah Посмотреть сообщение
Это размер массива объектов типа string, а не количество памяти, которое занимают "записанные" в объекты строки

Добавлено через 50 секунд

Да, будет. Размер объекта не зависит от того, какую строку Вы в него запихнете.
Теперь понял, спасибо большое.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 17:17     Непонятки после php #38
Цитата Сообщение от lesromand Посмотреть сообщение
два int он показывает на 1 элемент массива, хотя там 1 число?
Хоть двадцать два числа... Ещё раз:
Цитата Сообщение от alsav22 Посмотреть сообщение
sizeof() выдаёт размер выделенной памяти
C++
1
int a[2];
Выделена память под два int. sizeof() это и выдаст.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 17:19     Непонятки после php
Еще ссылки по теме:

непонятки с указателями C++
C++ Непонятки со списком
C++ непонятки с for

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 17:19     Непонятки после php #39
delete
Yandex
Объявления
21.08.2013, 17:19     Непонятки после php
Ответ Создать тему
Опции темы

Текущее время: 23:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru