Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
6 / 6 / 7
Регистрация: 07.08.2016
Сообщений: 44

В чём разница между string и символьными массивами?

11.08.2016, 00:02. Показов 15540. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собсна какая тема, такой и вопрос. Если выразить его по-точнее, то в чём существенные плюсы того и другого в разных ситуациях? Изучаю С++ и, естественно, столкнулся с символами и строками. Что лучше в какой ситуации и в чём их главное различие не совсем понимаю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2016, 00:02
Ответы с готовыми решениями:

В чем разница между этими массивами?
const char *names = {"Ivanov", "Petrov", "Sidorov"}; const char **names = {"Ivanov", "Petrov", "Sidorov"}; Добавлено через 8...

В чем принципиальная разница между массивами в VBScript и JavaScript?
Народ, объясните, пож., в чем принципиальная разница между массивами в VBScript и JavaScript? Проблема в том, что при передаче...

В чем разница между string и String?
В чем разница между string и String с заглавной буквы? :pardon:

64
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
11.08.2016, 15:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
stl устарела лет на 20 даже на момент своего появления
и
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
AnsiString и StringList гораздо раньше STD появились
из этого не следует, что они устарели еще больше?

или их переписывают постоянно
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 15:27
Цитата Сообщение от Toshkarik Посмотреть сообщение
Будет намного эффективней и безопасней.
Эффективнее будет копировать память? Чем безопаснее? Тем, что можем нагадить в стек а не в кучу?
UPD: А если строка не создается а изменяется (передается по ссылке)?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.08.2016, 15:32
Цитата Сообщение от Toshkarik Посмотреть сообщение
Какими еще требованиями?
Простые. Чем хуже читабельный код тем больше в нем багов. настолько плохо читаемую либу как STL ниде и ни у кого больше не видел. Мало того она на каждом шагу unsafe. не говоря уже про никуда негодные итераторы, объект на который ссылаются поло"умные" указатели даже самоудалиться не может без креша.
Цитата Сообщение от Toshkarik Посмотреть сообщение
Это называется голословность
Точно так же как и утверждение что stl венец творения и вообще хоть в чем то удобна.

Цитата Сообщение от Toshkarik Посмотреть сообщение
или любую другую библиотеку/класс, которую Вы приведете в пример
Надеюсь вы в курсе что уже 20 лет рулит концепция управления памятью и поведением/жизненным циклом объектами на основе списков владения и списков обработки и отслеживанием контейнером жизненного цикла и состояния содержимого? Где средства для таких списков в STL? Нету. А средства для их создания? Тоже нету. А указатели которые бы поддерживали необходимое для этой концепции поведение объектов? Тоже отсутствуют, а те которые есть только мешают. Вопрос -ну и зачем эта STL вообще нужна?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 15:44
Цитата Сообщение от avgoor Посмотреть сообщение
Эффективнее будет копировать память?
Я думаю, что да. Что бы не гадать, можно сравнить скомпилированные куски асма.

Цитата Сообщение от avgoor Посмотреть сообщение
Чем безопаснее?
Тем, что за внутреним состоянием объекта будет следить класс, а не программист, который не может угадывать реализацию данного класса. Помимо изменения размера, возможно, нужны и другие операции внутри объекта.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Точно так же как и утверждение что stl венец творения и вообще хоть в чем то удобна.
Покажите, где я утверждал это? Опять голословность. stl делает ту работу, для которой создавалась.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Надеюсь вы в курсе что уже 20 лет рулит концепция управления памятью и поведением/жизненным циклом объектами на основе списков владения и списков обработки и отслеживанием контейнером жизненного цикла и состояния содержимого? Где средства для таких списков в STL? Нету. А средства для их создания? Тоже нету. А указатели которые бы поддерживали необходимое для этой концепции поведение объектов? Тоже отсутствуют, а те которые есть только мешают. Вопрос -ну и зачем эта STL вообще нужна?
Вы вообще понимаете, что Вы печатаете? Вы уже к языку как таковому придераетесь, а не к stl. Программируйте на Java в таком случае, там и памятью не Вы будете управлять и убирать за Вами будут. Уже балаган какой то начался...

Добавлено через 3 минуты
Цитата Сообщение от avgoor Посмотреть сообщение
UPD: А если строка не создается а изменяется (передается по ссылке)?
operator= же. Про передачу по ссылке даже говорить ничего не буду, это надо в раздел холиваров идти Не могу понять, Вы спорите ради спора, или действительно считаете, что данный способ использования std::string удобен и его можно применять? Не говоря уже о советах новичкам.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.08.2016, 15:49
Цитата Сообщение от Toshkarik Посмотреть сообщение
Программируйте на Java в таком случае, там и памятью не Вы будете управлять и убирать за Вами будут
Потому и программирую на С++ что могу управлять памятью как надо именно для концепции со списками владения и списками обработки. Автоматические мусоросборники на основе рефкаунтинга и трассивровки пути к руту для таких задач непригодны, только мешают. А вот как раз от STL джавой и попахивает за версту. А для этой концепции задачи абсолютно другие. Нужно не удалить объект на который не осталось ссылок, а в случае удаления объекта вычистить ссылки на него из всех списков.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 15:49
Цитата Сообщение от Toshkarik Посмотреть сообщение
Помимо изменения размера, возможно, нужны и другие операции внутри объекта
Т.е. operator[] вообще использовать нельзя? А то вдруг нужны какие-то операции...
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.08.2016, 15:51
Цитата Сообщение от Toshkarik Посмотреть сообщение
Покажите, где я утверждал это?
вот здесь:
Цитата Сообщение от Toshkarik Посмотреть сообщение
При прямых руках используется std::string, а не изобретаются велосипеды.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 16:00
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
вот здесь:
Сообщение от Toshkarik
При прямых руках используется std::string, а не изобретаются велосипеды.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Точно так же как и утверждение что stl венец творения и вообще хоть в чем то удобна.
Так это для Вас одно и тоже? Можете не отвечать, это риторический вопрос. Удачи Вам.

Цитата Сообщение от avgoor Посмотреть сообщение
Т.е. operator[] вообще использовать нельзя? А то вдруг нужны какие-то операции...
Ну Вы то откуда это взяли? Я не хочу спорить ради спора.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.08.2016, 16:12
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так это для Вас одно и тоже?
Итак немного включим логики. Тот у кого прямые руки пользует лучшие имеющиеся для решения задачи средства (надеюсь с эти спорить не будtте?). Соответственно из утверждения что тот у кого руки прямые пользует std:: вытекает что stl лучшее средство для любых задач а следовательно венец творения.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 16:17
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Итак немного включим логики.

Не по теме:

Видимо, включатель сломался, потому что нет логики в этом сообщении. Перечитайте пару раз тему.

0
11.08.2016, 16:18

Не по теме:

Fulcrum_013, честно, как будто ищите к чему придраться, у вас не правильное суждение, учитывайте мнение другого человека и свое тоже во все дыры пихать не надо, никто не говорил, что stl венец, но по вашей же логике можно сказать что AnsiString венец

0
11.08.2016, 16:24

Не по теме:

Цитата Сообщение от obivan Посмотреть сообщение
о по вашей же логике можно сказать что AnsiString венец
Сам по себе не венец. Но в купе со StringList в плане обработки текстов (набора строк как единого целого) превосходит средства stl на порядок.

0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 16:30
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну Вы то откуда это взяли? Я не хочу спорить ради спора.
...
Цитата Сообщение от Toshkarik Посмотреть сообщение
Тем, что за внутреним состоянием объекта будет следить класс, а не программист, который не может угадывать реализацию данного класса. Помимо изменения размера, возможно, нужны и другие операции внутри объекта
В приведенном мною коде используются только конструктор, operator[] и resize().
А чтоб не спорить ради спора, прочиатйте, наконец, что в стандарте написано про std::basic_string, что такое contiguous container и contiguous iterator, что возврщает string::length() и как он связан с длиной, именно, си строки внутри (подсказка - никак). А подход: я не знаю можно или нет, но как бы чего не вышло... ущербен. Если что-то не понятно, надо это выяснять.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 16:47
avgoor, стандарт я читал, спасибо за совет. Ничего нового Вы для меня не написали. Стандарт ( С++11 ) гарантирует ( что я уже и писал в теме ), что занимаемая память строкой будет "contiguous". Ничего о записи напрямую в буфер не сказано. Я как раз и говорил про то, что за изменением объекта должен следить сам объект, а не программист.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 16:51
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ничего о записи напрямую в буфер не сказано
Т.е. по вашему str[10] и *(&str[0]+10) не эквивалентны (в случае достаточной длины контейнера)?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 16:58
Я же написал свою позицию, зачем лишние вопросы.
Цитата Сообщение от Toshkarik Посмотреть сообщение
за изменением объекта должен следить сам объект, а не программист.
Я не хочу делать никаких догадок. Равно или нет, меня, как прогаммиста, использующего данный класс, это не должно волновать.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 17:07
Toshkarik, А хотите пример, где ваш код упадет, а мой - нет?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 17:10
avgoor, там, где char buff[ MAX_DLL_STR ] не влезет в стек?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
11.08.2016, 17:15
Toshkarik, Ога. Наша библиотека будет возвращать "Войну и мир". Исправить это можно только динамическим выделением/освобождением памяти (увеличение стека рассматривать не будем ибо это enlarge your stack only for 5$). Все еще будете настаивать - что это эффективно?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
11.08.2016, 17:28
avgoor, конечно, буду. В таких ситуациях это проблема проектирования. Не должно все хранится в одной строке. Или, как минимум, доставаться оно должно по другому. Можно так же сказать, что система не сможет выделить цельный кусок памяти размером MAX_DLL_STR и программа кинет исключение.

Добавлено через 9 минут

Не по теме:

Загуглил для интереса. Война и мир занимает всего ~4mb. Так что влезет :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2016, 17:28

В чем разница между массивом строк и List<string>?
А есть ли принципиальная разница между string array1 и List&lt;string&gt; array2 ? И если есть, то в чем она заключается?

В чем разница между new ArrayList<String>() и new ArrayList<>()?
подскажите,знатоки,в чем разность между ArrayList &lt;String&gt; stringList = new ArrayList&lt;String&gt;(); и ArrayList &lt;String&gt;...

В чём разница между возвратом "string" и "const string&" &
class test { public: test(const string&amp; text) { this-&gt;text = text; } string getText() { return text;

Разница между массивами объектов
Столкнулся с ситуацией, что в ArrayList &lt;SomeClass&gt; нельзя записать метод из класса если он void, в обычный массив метод класса с void...

Разница между многомерными и зубчатыми массивами
Только недавно начал изучать. Не судите строго. Если мне нужно создать матрицу, то многомерные массивы имеют какое-то преимущество над...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru