Inicjalizacja obiektów tablicy dynamicznej, tak aby każdy z nich miał wartość 1

0

Hey, mam pytanie:
tworzę sobie tablicę dynamiczną w następujący sposób:

int* tab = new int[3];

i mam pytanie czy da się jakoś zainicjować zmienne? np. żeby każdy element miał wartość 1?
Gdy robię w ten sposób:

 int* tab = new int[3] = {1, 2, 3};

to wywala mi błąd ;(

poprawienie tematu wątku + dodanie znacznika <code class="cpp"> - fp

0
vector<int> tab(n,1);
3

Da się.

int *tab = new int[3] {1, 2, 3};

To jest uniform initialization z C++11.

Jeżeli wszystkie elementy mają być takie same i ma ich być dużo (tzn. nie chce się wpisywać wszystkich), to można użyć std::fill albo std::fill_n:

int *tab = new int[100];
std::fill_n(tab, 100, 1);

Hint: jeżeli mają być zera to wystarczy: (To nie jest nowy feature w C++11)

int *tab = new int[3] ();

{} zamiast () daje ten sam efekt.

0

{} jest z c++11. Zainteresowałem się tym i sprawdziłem czasy dla tych trzech rozwiązań. () i {} działa tak samo szybko (z dokładnoscią co do jednej milisekundy, wiec prawdopodobnie jedno jest konwertowane na drugie jak np w przypadku std::pair: .first / ->first), natomiast najszybsza możlwa pętla for zerująca tablice (zmienna sterująca jest register - chyba, ze kompilator ma mnie gdzieś) działa 75% wolniej dla tablicy 2e7 elementowej - tak samo tak std::fill_n

1 użytkowników online, w tym zalogowanych: 0, gości: 1