如果两个数字之差为1,则将数字从vector放入vector <vector >>

时间:2018-10-15 12:59:14

标签: c++ algorithm stdvector

此代码段存在问题,我无法意识到自己做错了什么。

错误输出是这样的:

/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 :(得分:2)

在给定的代码段中您有4个问题:

  1. 这不是索引2D数组的方法:b[i, j]。您用b[i][j]对其进行索引。否则,您将使用comma operator来计算单个索引(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 ()));)分配所有这些元素,而不要使用{ {1}}。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,然后定义实现该打印的功能。