【问题标题】:C++ list of vectorsC++ 向量列表
【发布时间】:2015-04-13 18:41:47
【问题描述】:

我使用向量列表(来自 STL)创建(或我想创建)简单程序。

用户指定向量的数量,然后指定每个向量的长度。然后程序在 for 循环中询问向量的每个元素。

询问用户关于编写第一个元素后它崩溃了。 在我将数据更改为 STL 列表和向量之前,程序运行良好。早些时候我使用简单的一维表和几个循环,但这种类型的程序对我来说没用。 代码如下:

#include <iostream>
#include <vector>
#include <list>
using namespace std;

void writing(int, int);

int main() {
    int n, i, j, m;
    cout << "Give quantity of vectors" << endl;
    cin >> m;
    for (j = 1; j <= m; j++) {
        cout << "Give quantity of elements in vector number " << j << endl;
        cin >> n;
        writing(n, m);
    }
    return 0;    
}

void writing(int n, int m) {
    int i;
    int j = 0;
    list<vector<double>> mylist;

    {
        auto it = mylist.begin();
        advance(it, j);
        vector<double>& v = *it;
        for (i = 0; i <= n; i--) {
            cout << "Give the element number " << i << endl;
            cin >> v[i];
        }
    }
}

请帮我找出错误。我在writing 函数中看到了int j 的错误,但错误发生得更早。

【问题讨论】:

  • 请正确缩进。
  • 还有MCVE也请...
  • 您的列表为空,但您将其视为空列表。每次只需循环并推送一个向量到列表中。
  • 另外,您取消引用空向量列表中的幽灵元素。
  • 我有一种感觉,您希望将列表传入部分填充,而不是每次调用函数时都创建一个新列表。

标签: c++ list c++11 vector stl


【解决方案1】:

这是一个列表。

list<vector<double>> mylist;

这是一个无法取消引用的迭代器,因为它来自一个空列表。

auto it = mylist.begin();

在这里它被取消引用了。

vector<double>& v = *it;

【讨论】:

  • 甚至在此之前,它已经超越了end()
  • @chris 不,不是。 advanced()int j = 0; 调用
  • @NathanOliver,很好。我很确定 OP 打算在通话中将 jm 交换(减去一对一)。
【解决方案2】:

您的列表是空的,因此您正试图访问一个不存在的向量。然后,您尝试访问向量中不存在的元素,因为您从未指定向量的大小。

【讨论】:

  • 如果我知道 mylist 的所有元素,我会写例如:list> mylist = {{1,2,3}, {4,2,4,0}, {1,5,6,7,8}};但我的列表有 m 个元素,每个元素都有不同但未知的长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多