|
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 20
|
|
Базовые знания11.11.2012, 00:09. Показов 6452. Ответов 15
Метки нет (Все метки)
Всем доброго времени суток!
У меня появилась нужда в систематизации знаний языка,и потому хотел бы узнать несколько интересующих меня тем,если есть возможность,то посоветуйте какую либо литературу или дайте ответ на несколько достаточно простых вопросов: 1.Как в памяти представляются Массивы,Списки,Очереди,Деревья,Стеки. 2.Что мы можем узнать из адреса переменной? 3.Как в памяти представляются Статические члены,глобальные и локальные объекты,константные объекты? 4.Методы отладки,дизассемблер. Заранее благодарю и прошу прощения за незнание таких элементарных вещей!
0
|
|
| 11.11.2012, 00:09 | |
|
Ответы с готовыми решениями:
15
Базовые знания Задание на базовые знания языка C++ C++ и базовые функции PHP |
|
139 / 133 / 57
Регистрация: 31.01.2012
Сообщений: 435
|
|
| 11.11.2012, 00:40 | |
|
по поводу первого вопроса - массивов, списков и прочих структур данных лично я бы посоветовал почитать книгу Кнут, Д. Искусство программирования.
ответы на 2-й и 3-й можно поискать в литературе указанной здесь Литература C++ (лично я начинал со Страуструпа)
0
|
|
|
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
|
||||
| 11.11.2012, 00:52 | ||||
|
Списки, очереди и прочие монстры - это структуры для хранения данных (контейнеры), которые могут быть реализованы соверешенно как угодно (в том числе и на основе массива). Так что как они в памяти лежат - вопрос к разработчику контейнеров. Добавлено через 4 минуты Не по теме: Телефон, и долг по уплате коммуналки. Адрес переменной (вот конкретно сам адрес) обычно никакого интереса не представляет. Но его можно в принципе преобразовать в указатель на переменную, но это низкоуровневые трюки. Проще и правильнее просто использовать сам указатель на переменную, который помимо самого адреса, обладает ещё и информацией о типе переменной. Добавлено через 5 минут
1
|
||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.11.2012, 00:55 | |
|
1.
а) массив - это непрерывный блок данных. Это означает, что зная, где этот блок начинается и какой размер имеет, мы можем легко переместиться в любую часть этого блока по номеру искомого элемента; б) список - структура данных, в которой мы можем, имея некоторый элемент, получить следующий (для односвязного списка) или следующий и предыдущий (для двусвязного списка). Фактически же список представляется в памяти как обособленные куски данных - узлы списка, связываются которые посредством указателей - каждый узел содержит указатель на следующий (или следующий и предыдущий) узел; в) очередь - это просто абстракция, структура данных, в которую элементы можно складывать только в конец, а доставать только из начала. Представлена может быть как в виде списка, так и в виде массива, так и в виде любой последовательной структуры данных; г) дерево, аналогично списку - разрозненные элементы данных в памяти. Однако структура связей уже другая. В каждом элементе (предке) хранится некоторое количество указателей на другие элементы (на потомков), которые являются корнями поддеревьев. Эти корни поддеревьев, в свою очередь, хранят указатели на своих потомков и так далее. Тут есть два исключения: существует один элемент, на которого не ссылается указатель ни в каком другом элементе - это корень всего дерева, а также есть элементы, которые не ссылаются ни на какие другие элементы (корни поддеревьев) - они называются листами дерева; д) стек - смотри пункт в) про очередь. 2. Не совсем понятен вопрос. Можем узнать адрес (ваш кэп). Можем узнать значение, лежащее по этому адресу.3. Представляются абсолютно одинаково - в виде блоков данных, которые и формируют эти объекты. Другое дело - в какой памяти и как с этой памятью можно работать, а также какое время жизни будет у таких объектов. Тут стоит оговориться про то, что константные объекты, если это объекты примитивных типов, могут быть подставлены компилятором в место их использования как значения этих объектов (т.н. оптимизация constant propagation), за счёт этого компилятор может вычислить значения некоторых выражений (подвыражения тоже можно считать выражениями), в которых используются только константы (т.н. оптимизация constant folding). 4. Тут даже и не знаю, что написать... Отлаживать с помощью отладчиков. А дизассемблер - для дизассемблирования .Добавлено через 1 минуту Да, говоря про списки, я имел ввиду наиболее известные связные списки. Сам по себе список - абстрактная структура данных, и может быть реализована как угодно (как я описал, на основе массивов, на основе массивов указателей на элементы и т.д.).
2
|
|
|
Комп_Оратор)
|
|
| 11.11.2012, 01:15 | |
|
Александреску A. "Современное проектирование на С++", гл.4 Размещение в памяти небольших объектов.
Вообще глобальность как область видимости, часто путается со статичностью как способом хранения. Однако, легко себе представить динамический объект с глобальной видимостью, хотя память выделяется в куче или наоборот статический объект для которого известен размер, но видимость ограничена, функцией например, и при этом память используется в области данных. Что касается массивов, то уже для 2-мерного динамического массива нет гарантии размещения элементов подряд, так как это массив одномерных массивов и память выделяется последовательно для каждого массива. Вообще тема очень большая и мне тоже интересно узнать больше. ![]() Не по теме: А сейчас, - главный вопрос забьет ли Кличко Баку баки?!
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 11.11.2012, 01:20 | ||
|
1
|
||
|
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 20
|
||
| 11.11.2012, 01:31 [ТС] | ||
|
Спасибо вам за ответы)
1.По поводу адреса и подразумевался указатель,а точнее его значение,и суть вопроса была в том,что можно сказать о переменной,глядя на 16-ое значение указателя,то есть как определить тип. 2.Первый вопрос подразумевал как раз таки контейнеры STL(и кстати ни кто не знает отличие его от Tulip?) 3.Какие методы отладки существуют?(помимо точек останова и вывода информации в консоль) Можно ли использовать данные дизассемблера для отладки?(если я правильно выразился,а то был у меня случай,когда выполнение программы останавливалось и выдавлся лист со значениями) Прошу прощения если опять выразился не понятно! Добавлено через 2 минуты
0
|
||
|
|
|
| 11.11.2012, 01:42 | |
|
nikeo, правила - один вопрос - одна тема
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 11.11.2012, 01:42 | |
|
nikeo, да в принципе ничего о переменной по указателю сказать нельзя. Если использовать RTTI, то typeof(*ptr_to_var) даст её тип, но особого смысла в этом я не вижу.
Если вопрос про STL-контейнеры, то std::vector основан на динамическом массиве, который обычно имеет большую, чем необходимо в данный момент, фактическую длину. Как только место заканчивается - выделяется новый массив большего размера (стандартные множители размера - 2 или 1,6 (золотое сечение, 1,618...)). Список (std::list) реализуется так, как я рассказал выше, с учётом того, что он ещё и кольцевой (последний элемент хранит указатель на первый). Как такового дерева в стандартных контейнерах нет, но такие структуры, как std::set и std::map (а также их мультиверсии) представляются красно-чёрными деревьями. Помимо самого хранения данных в виде бинарного дерева, во время вставок и удалений происходит балансировка дерева, с целью равномерно распределить элементы по всему дереву (чтобы не было так, что, например, левое поддерево корня имеет высоту 10, а правое - высоту 2). Стек (std::stack) и очередь (std::queue) в контексте STL - адаптеры контейнеров (т.е. внутри представлены каким-либо контейнером, а наружу выдают только ту часть его интерфейса, которая характерна для конкретной структуры). Теоретически в качестве контейнера в стек и очередь можно при создании в качестве второго аргумента шаблона можно передать любой последовательный контейнер, но по умолчанию используется std::deque, так называемый дек, характерный тем, что имеет быструю вставку в начало и конец. Внутренне представлен как связный список небольших массивов (в первом приближении). Расширяется за счёт выделения нового такого узла-массива. Лень мне расписывать его внутреннюю структуру, можно поискать по ключевому слову "std::deque внутренняя реализация".
1
|
|
|
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 20
|
||
| 11.11.2012, 22:43 [ТС] | ||
|
Спасибо что открыли!)
Вот я не могу понять одной вещи,говорят что в связанном списке,элемент содержит информацию о другом элементе,но как?в чем это выражается? Добавлено через 2 минуты
0
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 11.11.2012, 22:46 | |
|
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||
| 11.11.2012, 22:48 | |||||||
|
nikeo, с помощью указателя.
Добавлено через 54 секунды
0
|
|||||||
|
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 20
|
||
| 13.11.2012, 20:22 [ТС] | ||
|
Добавлено через 2 минуты Или смысл в том,что элементы "разбросаны" по памяти?
0
|
||
|
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 20
|
|
| 13.11.2012, 20:28 [ТС] | |
|
0
|
|
| 13.11.2012, 20:28 | |
|
Помогаю со студенческими работами здесь
16
Виртуальные базовые классы
Абстрактные базовые классы Виртуальные базовые классы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|