C++ STL; (vector) подскажите как в интервале заменить элементы ПРИМЕР: создали...

0 голосов
94 просмотров

C++ STL; (vector) подскажите как в интервале заменить элементы
ПРИМЕР: создали последовательность 1 2 3 4 5 6 7 8
ввожу интервал например от 2 по 5 заменить на 0
ВЫВОД: 1 2 0 0 0 7 8


Информатика (137 баллов) | 94 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Циклом for можно реализовать задачу.

for (i = 2; i < 5; i ++)
v[i] = 0;

(6.8k баллов)
0

спасибо огромное ....так просто это было сделать(( вот я Дурень

0

Лучше это делать на итераторах, не забываем, что их не зря добавили в STL, кроме того, такое написание кода, слеганца попахивает, я бы посоветовал переформатировать данный ответ в что-то вот такое вот:

const unsigned int beginEmplaceIndx(2);
const unsigned int endEmplaceIndx(5);
const int newCellValue(0);

for (int iIndx = beginEmplaceIndx; iIndx < endEmplaceIndx; ++iIndx)
{
myVector[iIndx] = newCellValue;
}

0

Кроме того прошу заметить несколько важных моментов:

0

* Нельзя использовать константы типа 2 и 5 или 0 в коде, это называется Magic Numbers и является очень плохой практикой
* Никто не пишет i++, всегда пишут ++i, если вам неизвестно почему, советую обратится к документации и прочитать про функционирование префиксного и постфиксный инкремента а в частности о выполняемых ими опирациями и в чем разницв
* Всегда пишите скобки ограничивающие область видимости для данного цикла, наделаете много ошибок если будете этим пренебрегать.

0

Ну и как уже написал, лучше переделывайте и используйте всегда итераторы вместо индекса, это поможет вам избежать большенства ошибок с обращением к несуществующемму пространству.

0

во-первых: всё, что вы написали - я прекрасно знаю. во-вторых: цель моей конструкции - наглядно показать, а не сделать что-то сверх умное. кроме того, если бы я писал серьёзную программу, то написал бы нормальные итераторы и хорошо позаботился бы об алгоритме. в-третьих: если мне нужен итератор на последнем месте после работы цикла, то ++i -действительно хорошая вещь, но если у меня будет временная переменная для цикла, то i++ или ++i - уже дело вкуса.

0

ибо после работы цикла i "удалится". magic values/numbers - действительно ужасная вещь.

0

Не обязательно удаляется индекс физичски, просто вы выходите из его области видимости :)
Что на счёт итераторов то это для автора сабжа.
На счёт Magic Numbers и "цель моей конструкции - наглядно показать" так показывайте нормально, а не пишите "антипаттерны", пока что это рабочий код махающий флагом:
Привет! Я работаю, но писать как писали меня - не надо!