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

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

Войти
Регистрация
Восстановить пароль
 
 
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 14
Завершенные тесты: 1
#1

Все ли хорошо в этом коде - C++

17.08.2016, 10:31. Просмотров 633. Ответов 27
Метки нет (Все метки)

Предложите ваши варианты решения заданий
3. Все ли хорошо в этом коде?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Файл legacy.c
int values[3];
 
Файл modern.cpp
#define LEGACY_SIZE 3
extern int *values;
 
class MyBlah {...};
 
class Adapter
{
public:
    Adapter()
    {
        for (int i = 0; i < LEGACY_SIZE; ++i)
            map_[values[i]] = new MyBlah (values[i]);
    }
private:
    std::map<int, MyBlah *> map_;
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 10:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Все ли хорошо в этом коде (C++):

почему то первый в этом коде у меня не нулевой элемент а идет по порядку все - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;locale.h&quot; #define countof(array) (sizeof(array) /...

Что не правильно в этом коде? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { float I; //Годовая процентная...

Что в этом коде не правильно? - C++
Как правильно синтезировать этот код? array и array_size - выдает ошибку double avg = 0; for (int i = 0; i&lt;array_size; i++) avg +=...

Сколько методов реализовано в этом коде? - C++
Сколько методов реализовано в этом коде? и какие? using namespace std; class Exem { private: char *name; // имя int data; //...

Посоветуйте альтернативу scanf() в этом коде - C++
// не работает scanf() в цыкле if, если же перед %c поставить пробел почему то, если ввести Y то происходит // замещение строк,...

помогите в этом коде записать в файл - C++
считывал с файла и выводил в файл #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstring&gt; #include &lt;cstddef&gt; using namespace...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HighPredator
5534 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,455
Записей в блоге: 2
18.08.2016, 15:53 #16
Цитата Сообщение от Avazart Посмотреть сообщение
Ну это интересный вопрос, std::string::find же возвращает npos который как бы -1
И тем не менее это ему не мешает быть типа size_t. Просто так они записывают в него максимальное значение для типа.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
18.08.2016, 15:57 #17
Цитата Сообщение от hoggy Посмотреть сообщение
вы почему используете знаковый тип для хранения беззнаковых величин?
Чтобы иметь возможность поставить assert на >= 0. Все равно довольно редко приходится оперировать большими числами
0
hoggy
Нарушитель
6590 / 2771 / 476
Регистрация: 15.11.2014
Сообщений: 6,125
Завершенные тесты: 1
18.08.2016, 16:28 #18
Цитата Сообщение от avgoor Посмотреть сообщение
если где-то отрицательные числа, таки, понадобятся - беззнаковые тоже могут превратиться в мину.
если вам нужны знаковые - используйте знаковый.
ваш кэп.

знаковые для хранения размеров/индексов понадобятся не могут.
ваш кэп.

Цитата Сообщение от avgoor Посмотреть сообщение
+ Учитывая, что в студии размер массива не может превышать 4Gb
это - монопенисуальный фактор.

корректный код не зависит от платформы.
это достигается за счет того, что код опирается на типы,
которые ему это гарантируют.

Цитата Сообщение от Avazart Посмотреть сообщение
как бы -1.
ага.
ключевое слово "как бе".
а главное ключевое слово - "npos".
вы сравниваетесь с константой.
и у вас нет ни одной причины думать,
что там под капотом (кроме любопытства).
и да, npos это - size_t(-1), а не -1

Цитата Сообщение от Voivoid Посмотреть сообщение
Чтобы иметь возможность поставить assert на >= 0.
то, чего не должно быть, не должно быть в принципе.
вам не нужно ставить такой ассерт при проверке индекса.
вам нужно ставить ассерт который контролирует вылет за пределы диапазона,
и только лишь.
1
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,675
Записей в блоге: 17
18.08.2016, 16:31 #19
Цитата Сообщение от hoggy Посмотреть сообщение
ага.
ключевое слово "как бе".
а главное ключевое слово - "npos".
вы сравниваетесь с константой.
и у вас нет ни одной причины думать,
что там под капотом (кроме любопытства).
и да, npos это - size_t(-1), а не -1
И тем не менее это условность/договоренность что npos это -1 или макс значение, константа или еще что либо.
(описанное в документации)
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
18.08.2016, 16:34 #20
В памяти всплывает светлый образ еще одного местного С++ гуру, который что-то писал про мэйбимонады А это снова они, родимые: нет индекса, удовлетворяющего условию - значит "нет", а не -1 - вы же сами против сишного наследия и за красоту и ясность абстракций?
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,675
Записей в блоге: 17
18.08.2016, 16:43 #21
Цитата Сообщение от _Ivana Посмотреть сообщение
нет индекса, удовлетворяющего условию - значит "нет", а не -1 - вы же сами против сишного наследия и за красоту и ясность абстракций?
Именно, но использование npos короче по записи, пускай не совсем ясно в общем случае, но именно для строк это вполне очевидно.
0
Babysitter
80 / 107 / 35
Регистрация: 23.11.2015
Сообщений: 332
Завершенные тесты: 1
18.08.2016, 17:01 #22
я даже вспомнил про ssize_t, которые как раз и должен обозначать что-то типа "беззнаковое или минус единица в случае ошибки". но это что-то из posix'а ..
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
18.08.2016, 18:12 #23
Цитата Сообщение от hoggy Посмотреть сообщение
то, чего не должно быть, не должно быть в принципе.
Ага, аргумент уровня: "а давайте просто писать без багов"
0
HighPredator
5534 / 1848 / 345
Регистрация: 10.12.2010
Сообщений: 5,455
Записей в блоге: 2
18.08.2016, 18:25 #24
Voivoid, а что вам не нравится? Вполне себе верные вещи hoggy пишет.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
18.08.2016, 18:42 #25
Цитата Сообщение от HighPredator Посмотреть сообщение
Voivoid, а что вам не нравится? Вполне себе верные вещи hoggy пишет.
1) Не нравится предложение поменять int на size_t в коде цикла из оп-поста. Там надо или везде менять инты на size_t или ничего не трогать
2) Тут вопрос конечно спорный, но лично я предпочитаю использовать int вместо size_t ( там, где это конечно возможно и не требует cast'ов ). По причине более легкого отлова ошибок.
0
avgoor
910 / 545 / 118
Регистрация: 05.12.2015
Сообщений: 1,511
18.08.2016, 19:01 #26
Цитата Сообщение от _Ivana Посмотреть сообщение
вы же сами против сишного наследия и за красоту и ясность абстракций?
А вот чисто интересно: nullptr - это ужасное наследие си или красивая и ясная абстракция?

Добавлено через 4 минуты
Цитата Сообщение от Voivoid Посмотреть сообщение
Тут вопрос конечно спорный, но лично я предпочитаю использовать int вместо size_t
В студии, кстати, в шаблонах кода обычный фор с size_t, а тайд реверсный с интом. Но я тоже предпочитаю не использовать беззнаковые типы там, где без них можно обойтись.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
18.08.2016, 19:12 #27
Цитата Сообщение от _Ivana Посмотреть сообщение
В памяти всплывает светлый образ еще одного местного С++ гуру, который что-то писал про мэйбимонады А это снова они, родимые: нет индекса, удовлетворяющего условию - значит "нет", а не -1 - вы же сами против сишного наследия и за красоту и ясность абстракций?
Что сказать-то хотел? Когда писалась стандартная библиотека, в плюсах еще не было optional'ов (аналог maybe из haskell ). И появятся они лишь в C++17, зато в бусте они уже довольно давно
0
hoggy
Нарушитель
6590 / 2771 / 476
Регистрация: 15.11.2014
Сообщений: 6,125
Завершенные тесты: 1
18.08.2016, 22:22 #28
Цитата Сообщение от Avazart Посмотреть сообщение
И тем не менее это условность/договоренность что npos это -1 или макс значение, константа или еще что либо.
нет никаких договоренностей.
вы не можете закладываться на конкретное значение npos
и вас вообще не должно это никак волновать.

все что вам нужно знать,
что бы пользоваться - что npos - несуществующая позиция.

Добавлено через 2 минуты
Цитата Сообщение от Voivoid Посмотреть сообщение
Ага, аргумент уровня: "а давайте просто писать без багов"

мой аргумент был вполне конкретен:

Цитата Сообщение от hoggy Посмотреть сообщение
корректно оформленная - корректна с точки зрения стандарта,
и гарантирует инвариант.
вам не нужен знаковый инт там, где по смыслу нужно беззнаковое,
только для того, что бы валидировать входные значения.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 22:22
Привет! Вот еще темы с ответами:

Как пронумеровать текст в этом коде? - C++
Очередной вопрос от полного профана в C++ Для проверки создал цикл while do, решил пронумеровать, но тут такая дилемма - #include...

Как дописать цикл в этом коде? - C++
#include &lt;graphics.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;dos.h&gt; class wheel { int X,Y;...

Структура (найти ошибку в этом коде) - C++
Добрый день. Возникла такая проблема, не могу найти ошибку в этом коде, выводит непонятные символы. Уже все перепробовал) #include...

Нужно найти ошибки в этом коде. - C++
//Этот код ничего не делает мне просто нужно понять где ошибки #include &lt;iostream.h&gt; struct info { char anun,azg; int toshak; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.08.2016, 22:22
Ответ Создать тему
Опции темы

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