为什么在c++中,在矢量结束后插入数据是错误的

Why are errors to insert a data after end of vector in c++

本文关键字:数据 插入 错误 c++ 为什么 结束      更新时间:2023-10-16
#include <sstream>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
string** DataStorage;
string line;
vector<vector<string>> extractingData(200, vector<string>(10));
vector<vector<string>> extractingData2(200, vector<string>(10));
string pathExtract;
string pathStorage;
ofstream storageFile;
ifstream storageFileRead;
fstream extractingFile;
fstream extractingFile2;

void ReadData(fstream& extractingFile, vector<vector<string>> extractingData, string pathExtract)
{
    extractingFile.open(pathExtract, ios::in | ios::out | std::ios_base::app);
    int i = 0;
    int index;
    if (extractingFile.is_open())
    {
        while (getline(extractingFile, line))
        {
            istringstream iss(line);
            int j = 0;
            while (!iss.eof()){
                iss >> extractingData[i][j];
                j++;
            }
            i++;
        }
        extractingFile.close();
    }
}

int main() {
    pathExtract = "sample.txt";
    pathStorage = "mergedData.txt";
    ReadData(extractingFile, extractingData, pathStorage);
    ReadData(extractingFile2, extractingData2, pathExtract);
    mergeData(extractingData, extractingData2, pathStorage);
}

void mergeData(vector<vector<string>> extractingData, vector<vector<string>> extractingData2, string pathStorage){
    int i = 0;
    int j = 0;
    while (i<extractingData.size())
    {
        while (extractingData[i][0] != extractingData2[j][0])
        {
            j++;
        }
        if (extractingData[i][0] == extractingData2[j][0])
        {
            //extractingData[i].insert
            extractingData[i].insert(extractingData[i].end(), extractingData2[j].pop_back()); // here is error
        }   
        i++;
    }
//  storageFileRead.open(pathStorage, std::ios_base::out | std::ios_base::app);
    storageFileRead.open(pathStorage);
    i = 0;
    if (storageFileRead.is_open())
    {
        ofstream outFile(pathStorage);
        while (getline(storageFileRead, line)){
            std::vector<int>::const_iterator col;   
            for (col = extractingData[i].begin(); col !=extractingData[i].end(); ++col) { // here is errors, too
                outFile << *col;
                }
            outFile << endl;
            i++;
        }
    }
}

我在一个名为mergedData.txt 的文本文件中有一个如下所示的数据集

country OD DM              
Croatia 36 15
Spain 35 26
Belgium 32 38
USA 25 57
France 24 29
Estonia 24 19

并且在名为sample.txt的文本文件中给出了新的数据集

country VT
Estonia 21%
Belgium 26%
Croatia 6%
France 29%
Spain 13%
USA 42%

我想在每行的末尾添加一些名为VT(志愿服务时间(的新变量。

country OD DM VT             
Croatia 36 15 6
Spain 35 26 13
Belgium 32 38 26
USA 25 57 42
France 24 29 29
Estonia 24 19 21

但也存在一些错误。任何帮助我都乐意。

extractingData[i].insert(extractingData[i].end(), extractingData2[j].pop_back()); // here is error

std::vector<>::pop_back不返回值。它只是删除了元素。先获取值,然后调用pop_back

auto back = std::move(extractingData2[j].back());
extractingData2[j].pop_back();
extractingData[i].push_back(std::move(back));