Как создать массив в C ++, используя new и инициализировать каждый элемент? - PullRequest
6 голосов
/ 11 января 2011

Без перебора каждого элемента, как мне создать массив с помощью new и инициализировать каждый элемент определенным значением?

bool* a = new bool[100000];

Используя VS 2008.

Спасибо!

Ответы [ 4 ]

14 голосов
/ 11 января 2011

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

vector<bool> a (100000, true);
12 голосов
/ 11 января 2011

В этом случае единственное значение, которое вы можете установить, это false с:

bool* a = new bool[100000]();

Тем не менее, я не уверен, почему вы думаете, что вы не можете использовать цикл,Они там по причине.Вы должны просто использовать готовую функцию fill или fill_n (в зависимости от вкуса).


Заметьте, что использование new "raw" - это ужасная практика программирования.Используйте std::vector<bool>*:

std::vector<bool> v;

v.resize(100000);
std::fill(v.begin(), v.end(), true); // or false

Или:

std::vector<bool> v;

v.reserve(100000);
std::fill_n(std::back_inserter(v), 100000, true); // or false

* Конечно, std::vector<bool> случается, что нарушает надлежащий интерфейс контейнера, поэтому фактически не сохраняет bool«s.Если это проблема, используйте std::vector<char>.

1 голос
/ 11 января 2011

Если 0 is false и 1 is true рассмотрены - вы можете сделать

bool* a = new bool[100];
std::fill_n( a, 100, 1 ); // all bool array elements set to true
std::fill_n( a, 100, 0 ); // all bool array elements set to false
1 голос
/ 11 января 2011

Вы должны предпочесть векторный подход, но вы также можете использовать memset.

...