H_F1nch 2020-04-10 15:16 采纳率: 100%
浏览 340
已采纳

vector容器的一个问题

我想读取如下格式的asc文件,想把前六行略过,余下的数字存入数组进行后续计算。我写的代码在下面,大致思路是全部读到vector容器里面,循环12次v1.erase(v1.begin()); 应该就吧前面的哪些元素删了吧?但是运行的时候报错

ncols 543

nrows 220

xllcorner 488469.3190918

yllcorner 3797068.373291

cellsize 2

NODATA_value -9999

-9999 -9999 -9999 -9999 -9999 -9999

0.015 0.015 0.015 0.015 0.015 0.015

0.015 0.015 0.015 0.015 0.015 0.2 0.015

0.015 0.015 0.015 0.015 0.015 0.015

#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

void test()
{
    vector<vector<string>>v1;
    double array[543][220];
    int i = 0, j = 0;
    string lineStr;
    char* end;
    ifstream manning;
    manning.open("C:\\Users\\lch\\Desktop\\C++\\MM\\manning.asc", ios::in);
    if (!manning.is_open())
    {
        cout << "文件打开失败" << endl;

    }
    while (getline(manning, lineStr))
    {
        stringstream ss(lineStr);
        string str;
        vector<string>linearray;
        while (getline(ss, str, ' '))
        {
            vector<vector<string>>::iterator it = v1.begin();
            for (int zz = 0; zz < 12; zz++)
            {
                it = v1.erase(it);

            }
            array[i][j] = atof(const_cast<const char*> (str.c_str()));
            j++;
        }
        i++;
    }

    manning.close();
    for (int i = 0; i < 543; i++)
    {
        for (int j = 0; j < 220; j++)
        {
            cout << array[i][j] << endl;
        }
    }

}

int main()
{
    test();

    system("pause");
    return 0;
}

这是我改写的一个代码,想通过循环删除vector容器中的第一个元素,把开头那六行删掉,把剩下从-9999开始的所有数字存到二维数组。方便后面计算,但是我在运行时提示如下错误

void _Tidy() noexcept { // free all storage
        auto& _My_data    = _Mypair._Myval2;
        pointer& _Myfirst = _My_data._Myfirst;
        pointer& _Mylast  = _My_data._Mylast;
        pointer& _Myend   = _My_data._Myend;

        _My_data._Orphan_all();

        if (_Myfirst) { // destroy and deallocate old array  **_引发了异常: 读取访问权限冲突。this 是 nullptr。_**

            _Destroy(_Myfirst, _Mylast);
            _Getal().deallocate(_Myfirst, static_cast<size_type>(_Myend - _Myfirst));

            _Myfirst = pointer();
            _Mylast  = pointer();
            _Myend   = pointer();
        }
    }

请问大神们该怎么改?或者又什么方法能让我跳过前六行只读取后面的那些数字?

  • 写回答

1条回答 默认 最新

  • 小学狗喵喵叫 2020-04-10 15:30
    关注
    void test()
    {
        double array[543][220];
        memset(array, 0, sizeof(array));
        int i = 0, j = 0, line = 0;
        string lineStr;
        char* end;
        ifstream manning;
        manning.open("E:\\manning.asc", ios::in);
        if (!manning.is_open())
        {
            cout << "文件打开失败" << endl;
    
        }
        while (getline(manning, lineStr))
        {
            if (++line <= 6)
                continue;
            stringstream ss(lineStr);
            string str;
            j = 0;
            while (getline(ss, str, ' '))
            {
                array[i][j] = atof(const_cast<const char*> (str.c_str()));
                j++;
            }
            i++;
        }
    
        manning.close();
        for (int i = 0; i < 543; i++)
        {
            for (int j = 0; j < 220; j++)
            {
                cout << array[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集