4

我写了两个for循环,希望看看它们是否会输出一个名为 的向量中的每个值data,但它不起作用。有一个错误data[i].at(j),我不太明白。

vector<int> data; //it is filled with some integers with x rows and y columns

for ( int i = 0; i < data.size(); ++i) {
    for ( int j = 0; j < col; ++j ) {
        cout << data[i].at(j) << ' ';
    }

    cout << endl;
}

我也试过这个方法,但也不管用。data.at(i).at(j)有错误。

for ( int i = 0; i < data.size(); ++i ) {
    for ( int j = 0; j < col; ++j ) {
        cout << data.at(i).at(j) << ' ';
    cout << endl;
}

这些中的任何一个都可以通过小修复工作还是根本不工作?

4

2 回答 2

4

重点在这里:

data[i].at(j) 

当你在位置索引你的向量时i,你会得到i它的第 - 个数字。那是类型int

然后你要求一个at()int. 这不是由原始类型提供的int

如果您尝试用 1D 模拟 2D 矢量,那么您可以这样做:

for (int i = 0; i < data.size(); ++i)
{
    for (int j = 0; j < col; ++j)
        cout << data[i + j * col] << ' ';
    cout << endl;
}
于 2017-10-11T03:52:55.873 回答
0

我发现打印 2D Vector 的内容就像2D Array 一样更容易。

例子:

假设我们有一个称为矩阵的二维向量,它包含 5 x 5 个值:

1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5

我们需要输出矩阵,所以我们将使用:

// The matrix:
vector <vector <int> > matrix ;

// The Row container:
vector <int> row

// The creation of the row:
for (int i = 1 ; i <= 5 ; i = i + 1) {
    row.push_back (i) ;
}

// The creation of the matrix.
for (int j = 1 ; j <= 5 ; j = j + 1) {
    matrix.push_back (row) ;
}

// Print the matrix
for (int k = 0 ; k < matrix.size () ; k = k + 1) {
    for (int l = 0 ; l < matrix [k].size () ; l = l + 1) {
        cout << matrix [k] [l] << ' ' ;
    }

    cout << endl ;
}

如果您有不同大小的行,上面的示例也将起作用:

1, 2, 3, 4,

1、2、

1, 2, 3,

1、2、3、4、5

1

但是,它将需要用户输入。

于 2018-06-15T12:07:37.267 回答