Поместите числа от вектора к вектору <vector>>, если разность двух чисел равна 1 - PullRequest
0 голосов
/ 15 октября 2018

У меня проблема с этим фрагментом кода, и я не могу понять, что я сделал не так.

Вывод ошибки выглядит следующим образом:

/storage/emulated/0/Documents/feladat.cpp:18:7: warning: expression result unused [-Wunused-value]
                                b[i, j] = b[a[i + 1], a[i]];
                                  ^
/storage/emulated/0/Documents/feladat.cpp:19:9: error: invalid operands to binary expression ('std::__ndk1::ostream' (aka 'basic_ostream<char>') and 'vector<vector<int> >')
                                cout<<b;
                                ~~~~^ ~
/data/data/ru.iiec.cxxdroid/files/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../include/c++/4.9.x/ostream:218:20: note: candidate function not viable: no known conversion from 'vector<vector<int> >' to 'const void *' for 1st argument; take the address of the argument with &
    basic_ostream& operator<<(const void* __p);

И это продолжается с другойвведите в () s

Это будет программа, которая создает пары в векторе b, если разность двух чисел равна 1.Вот мой код:

#include <iostream>
#include <vector>

using namespace std;
int main()
{
    vector<int> a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    vector<vector<int>> b;
    b.reserve(10);
    int i = 0;
    int j = 1;
    for (i < a.size(); i++;)
    {
        for (j <= a.size(); j++;)
        {
            if (a[i + 1] - a[i] == 1)
            {
                b[i, j] = b[a[i + 1], a[i]];
                cout << b;
            }
        }
    }
    return 0;
}

1 Ответ

0 голосов
/ 15 октября 2018

У вас есть 4 проблемы в данном фрагменте кода:

  1. Это не то, как вы индексируете двумерный массив: b[i, j].Вы индексируете это b[i][j].В противном случае вы используете оператор запятой для вычисления одиночного индекса (b[i, j] будет эквивалентно b[j]).
  2. for циклы находятся вформа for (initialization;comparison;increment).Некоторые части могут быть пустыми, но точки с запятой должны быть там.Следовательно, for (i < a.size(); i++;) должно быть for (;i < a.size(); i++;) или, альтернативно, for (int i = 0; i < a.size(); i++;).То же самое для цикла j.
  3. Неопределенное поведение из-за индексации (потенциально нераспределенного) пространства b.Если вы хотите создать по 10 элементов каждого вектора, чтобы вы могли использовать operator[], попробуйте выделить все эти элементы с помощью vector<vector<int>> b (10, vector<int> (10)); (или, альтернативно (vector<vector<int>> b (a.size (), vector<int> (a.size ()));) вместо использования reserve. reserveследует использовать для предотвращения многократного перераспределения из-за нескольких push_back с.

    Примечание , такое изменение сделает цикл for (;j <= a.size(); j++;) индекс недопустимыми диапазонами вектора, из-за этого происходитчерез значения [1, 10], тогда как вектор будет содержать действительные индексы [0, 9]. Вы можете изменить либо условие цикла, либо индексирование (например, на b[i][j-1] = b[a[i + 1]-1][a[i]-1];).

  4. std::vector не имеет определенного значения operator<<, которое можно использовать для печати. ​​Вам нужно будет решить, каким образом вы хотите печатать vector, а затем определить функцию, которая реализует такую ​​функцию.печать.

...