Ошибка при печати вектора векторов на c++

у меня есть вектор векторов типа uint16_t, нужно их вывести, но vs пишет ошибку "отсутствует оператор "<<", соответствующий этим операндам"

#include <vector>
#include <iostream>

int main() {
   vector<vector<uint16_t>> data[3];
   /*здесь я его заполнил*/
   // печать
   for (const auto& i : data) {
      for (uint16_t j : data[i]) {
         cout << j << " "; // здесь какая-то ошибка
      }
      cout << endl;
   }
   return 0;
}

как можно исправить данное недоразумение? связано это ли с тем что я объявил вектор векторов как массив "[3]" или такое использование разрешено?


Ответы (2 шт):

Автор решения: Qwertiy

Два варианта.

Первый:

vector<vector<uint16_t>> data[3];
vector<vector<uint16_t>> data(3);
for (uint16_t j : data[i]) {
for (uint16_t j : i) {

Второй:

for (auto &vo : data) {
  for (auto &vi : vo) {
    for (uint16_t x : vi) {
      cout << x << " ";
    }
  }
}
→ Ссылка
Автор решения: sibedir

связано это ли с тем что я объявил вектор векторов как массив "[3]"

нет, не связано. Вы не указали из какого пространства имён ваши cout и endl (да и vector тоже)

  1. Вектор так не объявляется. [] тут не уместно. Вам нужен конструктов, принимающий в качестве аргумента размер инициализируемого массива.
  2. Во вложенном цикле Вы не верно используете i. Это у Вас ссылка на вектор, а не индекс.
#include <vector>
#include <iostream>
#include <cstdint>

int main() {
   std::vector<std::vector<uint16_t>> data(3);
   std::cout << data.size() << std::endl;
   /*здесь я его заполнил*/
   data[0] = {1,1,1};
   data[1] = {2,2,2};
   data[2] = {3,3,3};
   // печать
   for (const auto& vec : data) {
      for (uint16_t num : vec) {
         std::cout << num << " ";
      }
      std::cout << std::endl;
   }
   return 0;
}

Вывод:

3
1 1 1 
2 2 2 
3 3 3 
→ Ссылка