Как вы устанавливаете содержимое динамически размещаемого массива?

0

Я немного запутался в том, как назначить глобальный указатель и дать значение в основной функции?

например, здесь мой пример кода

bool *list;
int main()
{
  list=new bool[7];    
  //i want to auto add a value but how, is that below code is correct??
  list={true,false,true,true,true,true};
}

я пытаюсь с кровопролитием c++ извините за мой плохой английский.

  • 0
    Вы должны сделать это вручную; присвойте значение каждому индексу, а также не забудьте удалить память, которую вы динамически распределили ...
Теги:
arrays
initialization
declaration

4 ответа

2

Этот синтаксис

list={true,false,true,true,true,true};

неправильно.

Вместо этого вы могли бы написать

bool *list;
int main()
{
  list=new bool[7] {true,false,true,true,true,true};    
}

Или вы должны использовать оператор присваивания

bool *list;
int main()
{
  list=new bool[7];
  list[0] = true;
  list[1] = false;
  list[2] = true;
  list[3] = true;
  list[4] = true;
  list[5] = true;     
}

Или вы можете использовать указатель на объект типа std :: array. Например

#include <array>

std::array<bool, 7> *list;

int main()
{
  list=new std::array<bool, 7>;

  *list =  {true,false,true,true,true,true};    
}

И, наконец, вы можете использовать std::vector<bool> вместо указателя. или std::bitset :)

  • 0
    : list = new bool [7] {true, false, true, true, true, true}; не будет работать.
  • 1
    @Sumeet, все хорошо в C ++ 11.
Показать ещё 5 комментариев
0

Почему указатель и динамическое распределение? Почему не просто:

bool list[7] = {true,false,true,true,true,true};

int main()
{
    // ... no need to initialize or assign here ...
}

Примечание. Массив имеет размер 7, но вы предоставляете только 6 начальных значений. Вы уверены, что это то, что вы хотите?

  • 0
    я думаю, что вы правы, но возможно ли изменить один массив внутри основной функции ?? как ниже: int main () {list [1] = true; }
  • 0
    Конечно, это возможно. Вы хотите предотвратить это? Затем поместите const перед bool list[7] = ... part.
Показать ещё 2 комментария
0
list[0] = true;
list[1] = false;
list[2] = true;
list[3] = true;
list[4] = true;
list[5] = true;
list[6] = ???; (whatever you want it to be - true or false)

Это самый простой способ, когда у вас нет десятков или сотен элементов.

  • 0
    так что нет другого способа вместо того, чтобы назначить его по одному ??
  • 0
    Если C ++ 11 доступен, еще проще: list = new bool[7]{true, false, ..., true}; , Если нет, опция является временным массивом и std::copy_n . Конечно, это должен быть std::vector (следует заметить, что он принимает v = {...}; ).
Показать ещё 3 комментария
0

Вы можете использовать битовый набор вместо массива.

#include <bitset>
#include <string>

std::bitset<7>* list;

int main()
{
    list = new std::bitset<7>;

    *list = std::bitset<7>(std::string("111101"));
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню