Как установить диапазон элементов в stl векторе к конкретному значению?

Каждый день в нашем офисе существует обмен, который проходит примерно так:

"Человек, я просто люблю модульные тесты, я только что был в состоянии сделать набор изменений в способе, которым что-то работает, и затем смогло подтвердить, что я ничего не повредил путем запущения теста по нему снова..."

детали ежедневно изменяются, но чувство не делает. Модульные тесты и разработка через тестирование (TDD) обладают таким количеством скрытых и персональных преимуществ, а также очевидными, которые Вы просто не можете действительно объяснить кому-то, пока они не делают ее сами.

, Но, игнорируя, что, вот моя попытка!

  1. Модульные тесты позволяет Вам вносить большие изменения для кодирования быстро. Вы знаете, что это работает теперь, потому что Вы запустили тесты при внесении изменений, необходимо сделать, необходимо получить тесты, работающие снова. Это сохраняет часы.

  2. TDD помогает Вам понять, когда прекратить кодировать. Ваши тесты вселяют Вам веру, что Вы сделали достаточно на данный момент и можете прекратить настраивать и идти дальше к следующей вещи.

  3. тесты и код сотрудничают для достижения лучшего кода. Ваш код мог быть плох / багги. Ваш ТЕСТ мог быть плох / багги. В TDD Вы полагаетесь на возможности [1 127] оба являющийся плохим / багги, являющийся низким. Часто это - тест, которому нужна фиксация, но это - все еще хороший результат.

  4. TDD помогает с кодированием запора. Когда сталкивающийся с большой и пугающей обрабатываемой деталью, вперед пишущий тесты получит Вас перемещающийся быстро.

  5. Модульные тесты помогают Вам действительно понять дизайн кода, Вы продолжаете работать. Вместо того, чтобы писать код, чтобы сделать что-то, Вы запускаете путем выделения всех условий, которым Вы подвергаете код и какие выводы Вы ожидали бы от этого.

  6. Модульные тесты дают Вам мгновенную визуальную обратную связь, всем нам нравится чувство всего того зеленого света, когда мы сделали. Это очень удовлетворяет. Также намного легче взять, где Вы кончили после прерывания, потому что Вы видите, где Вы добрались до - что следующий красный свет, которому нужна фиксация.

  7. Вопреки поблочному тестированию широко распространенного мнения не означает писать вдвое больше кода или кодировать медленнее. Это быстрее и более устойчиво, чем кодирование без тестов, как только Вы приобрели навык его. Сам тестовый код обычно относительно тривиален и не добавляет большие издержки к тому, что Вы делаете. Это - то, которому Вы будете только верить при выполнении его:)

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

  9. Хорошие модульные тесты могут помочь документу и определить то, что что-то, как предполагается, делает

  10. справка Модульных тестов с повторным использованием кода. Переместите и свой код и Ваши тесты к Вашему новому проекту. Настройте код до тестового прогона снова.

Большая работа, с которой я связан, не делает Модульного теста хорошо (взаимодействие с пользователем веб-приложения и т.д.), но несмотря на это мы - весь тест, зараженный в этом магазине и самый счастливый, когда нам связали наши тесты. Я не могу рекомендовать подход достаточно высоко.

14
задан Dima 17 July 2009 в 14:26
поделиться

3 ответа

std :: fill или std :: fill_n в заголовке алгоритма должно помочь.

 // set m elements, starting from myvec.begin() + n to true
std::fill_n(myvec.begin() + n, m, true);

// set all elements between myvec.begin() + n and myvec.begin() + n + m to true
std::fill(myvec.begin() + n, myvec.begin() + n + m, true); 
43
ответ дан 1 December 2019 в 06:16
поделиться

Вектор типа bool. По спине у меня мурашки по коже.

Вы смотрели: std :: bitset (для наборов флагов фиксированного размера) boost :: dynamic_bitset (для наборов флагов динамического размера)

Установить нижние 8 бит в строке:

#include <bitset>
#include <iostream>


int main()
{
    std::bitset<12>      flags;
    flags   |= 0x0FF;

    std::cout << flags;
}  
5
ответ дан 1 December 2019 в 06:16
поделиться

Насколько мне известно, нет. Вы можете попробовать использовать один из алгоритмов, например std :: for_each, std :: replace или std :: fill, чтобы скрыть тот факт, что вы выполняете цикл по диапазону элементов, но цикл у вас будет.

Учитывая, что вы сказал, что вы используете вектор логических значений - если вы используете специализацию std :: vector, возможно, вы захотите прочитать раздел «что насчет bool» в этой статье Херба Саттера .

3
ответ дан 1 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: