Это правильно вектора?

0

я хочу создать 16 vecotr

vector<int> queue[16]

в то же время, я хочу создать 3 очереди в 16 векторе

поэтому я думаю, что если я напишу этот код, как это

vector<int> queue[16][3]

это точное описание?

Я пытался. но хотите проверить, что код в основном правильный?

пожалуйста помогите!

  • 0
    vector<int> queue[16][3] - это двумерный массив из 48 векторов. Я не понимаю, чего ты хочешь. Если вы хотите очередь, используйте std::queue<> .
  • 0
    но если я использую std :: queue <>, я не могу прочитать элементы в очереди
Показать ещё 7 комментариев
Теги:
multidimensional-array
vector

1 ответ

2

Чтобы создать std::vector<int> который инициализирован размером 16 элементов, вы хотите сказать:

std::vector<int> queue(16);

Аргумент 16 для queue говорит инициализировать вектор, чтобы иметь 16 элементов. Таким образом, это создаст вектор и инициализирует его для хранения 16 элементов. Вы всегда можете изменить размер std::vector, поэтому не всегда необходимо его размер.

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

std::vector<int> queue(16, 42);  // 16 elements with the value 42.

Чтобы создать двухмерный вектор, вам нужно объявить вектор векторов ints. Это немного сложнее. Это объявляет его, не устанавливая его размер:

std::vector< std::vector< int > > queue;

Чтобы инициализировать это до 16 x 3 двухмерного вектора векторов, следующий синтаксис будет делать то, что вы хотите:

std::vector< std::vector< int > > queue( 16, std::vector<int>(3) );

Там немного происходит в инициализации:

  • Первый аргумент для queue - это размер для инициализации внешнего вектора. Это 16.
  • Второй аргумент - это значение для инициализации этих элементов. В этом случае мы предоставляем std::vector<int> который был инициализирован для хранения трех элементов. Этот анонимный vector<int> будет скопирован на каждый из 16 элементов внешнего вектора.

Результатом является 2-D вектор-of-vector-of-int, первый (внешний) размер которого равен 16, а второй (внутренний) размер равен 3.

Теперь все, что сказал, вектор 16x3 вектора-of-int вряд ли будет таким эффективным. Вы можете рассмотреть возможность создания структуры или использования std::tuple для объединения трех значений вместе и создания вектора этого, поэтому вы остаетесь в виде одномерного вектора.

И имя вашей queue переменных предполагает, что вы создаете очередь значений. Фактически вы можете использовать std::queue если это соответствует вашим целям.

  • 0
    я пробовал std :: vector <std :: vector <int>> queue (16, std :: vector <int> (3)), но я хочу использовать push_back () для добавления элемента
  • 0
    Я полагаю, вы пытаетесь push_back на внешнее измерение? В этом случае, если внутреннее измерение всегда равно 3, вам следует рассмотреть возможность использования struct , class или std::tuple которой всегда есть 3 элемента, и сделать это 1-D структурой, охватывающей этот комплект-3.
Показать ещё 9 комментариев

Ещё вопросы

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