C++ 将结构的链接列表添加到数组会产生错误

C++ 将结构的链接列表添加到数组会产生错误,c++,arrays,list,stl,C++,Arrays,List,Stl,这是我第一次在这个网站上问问题,所以如果我违反了任何礼仪,请告诉我 我对链表非常陌生,认为使用list数据类型实现链表非常简单,但似乎我正试图用它们做一些奇怪的事情 我已经创建了一个名为“eventList”的列表,我想在其中放入一系列名为“entry”的structs,然后我想将几个“eventList”放入一个名为“processList”的数组中 我的问题是这段代码 processList[pid].push_front(newEntry); 似乎给了我一个错误。我所做的有什么明显的错误

这是我第一次在这个网站上问问题,所以如果我违反了任何礼仪,请告诉我

我对链表非常陌生,认为使用
list
数据类型实现链表非常简单,但似乎我正试图用它们做一些奇怪的事情

我已经创建了一个名为“eventList”的
列表,我想在其中放入一系列名为“entry”的
struct
s,然后我想将几个“eventList”放入一个名为“processList”的数组中

我的问题是这段代码

processList[pid].push_front(newEntry);
似乎给了我一个错误。我所做的有什么明显的错误吗

代码如下:

#include <iostream>
#include <fstream>
#include <list>
#include <string>
#include <array>

using namespace std;

struct entry {
    int eTime;
    string eType;
    int pid;
};

int main(){
ifstream infile;
string comm;
int num;

entry newEntry;
list<entry> eventList;
array<list<entry>, 1024> processList;


infile.open("input00.txt");

if(infile.is_open()){
    while(!infile.eof()){
        int pid = -1;
        string eTy;
        int eTi;
        infile >> eTy;
        infile >> eTi;

        if(eTy == "NEW"){
            pid++;
            cout << "DB: Process " << pid << endl;
        }
        else{
            newEntry.pid = pid;
            newEntry.eType = eTy;
            cout << "Type: " << newEntry.eType << " | ";
            newEntry.eTime = eTi;
            cout << "Time: " << newEntry.eTime << endl;
            processList[pid].push_front(newEntry);
            //processList[pid] = eventList;  <- realized that that wouldn't work fairly quickly
        }
    }
}

else {
    cout << "Sorry, that file doesn't work. :[" <<endl;
}

cout << "Original Order:" << endl;

list<entry>::iterator p = eventList.begin();

while(p != eventList.end()){
    cout << p->eType << " For " << p->eTime << "\n";    //This comes from http://www.cplusplus.com/forum/beginner/3396/
    p++;
}

//cout << "Ordered By Time:\n";

//eventList.sort(); <- commented out, because I can't get it to work. :[

system ("PAUSE");
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构条目{
国际时间;
字串;
int-pid;
};
int main(){
河流充填;
字符串通信;
int-num;
新条目;
列表事件列表;
数组进程列表;
infile.open(“input00.txt”);
if(infle.is_open()){
而(!infle.eof()){
int-pid=-1;
字符串eTy;
int eTi;
填充>>eTy;
INFLE>>eTi;
如果(eTy==“新”){
pid++;
cout如果eTy!=“NEW”,则pid保持等于-1

所以

进程列表[pid]。向前推(新条目)


将崩溃,因为下标超出了界限(-1)

您正在while循环内初始化pid。因此,无论您做什么,您都将引用数组[-1]。与调试器交谈,这将证明我是对的。

无论链接列表有多棒,在没有“
使用命名空间std
”位)。使用
向量(
std::vector

std::list
提供与
std::vector
相同的功能,除了:

  • 列表
    不能像
    向量
  • list
    作为一个双链接列表,它使用的内存大约是小型结构的
    vector
    的4倍
  • 列表
    即使以顺序方式访问也比vector慢。这是因为vector更容易缓存,因为它是本地化的
  • 列表
    在其他方面通常也比
    向量
列表的唯一“优点”是插入新元素不会使迭代器失效。但是向量索引比迭代器更可靠,所以除非您绝对需要,否则永远不要使用迭代器


而且,
push\u front
以相反的顺序建立一个列表,你通常应该使用
push\u back

你好,欢迎访问该网站。你得到的错误是什么?我相信你的问题中缺少了一些信息-实际上,我没有得到问题本身是什么。对不起,我刚刚编辑了问题,我或者我的程序正在退出”,返回值为3221225477",这对我来说意义不大,但我想我确实在某个地方看到了segfault这个词。我的假设是,我正在尝试将某个内容放入内存地址,而该内存地址中不需要任何内容。是时候启动调试器并逐步检查您的代码了。我猜,您第一次尝试使用pid将一个条目添加到列表中=-1,因此尝试引用数组[-1].但这只是一个猜测。无论你使用哪个调试器,都会告诉你。你也可以在那里。好吧,说真的,你们都很棒。非常感谢,我想我假设pid++会在尝试添加到列表之前将其增量为0。我想我会在这里更多,但现在,非常感谢大家的帮助,每一天一个!我实际上更习惯向量,但我的教授出于某种原因非常坚持使用链表,所以我认为至少学习如何使用它们是个好主意。不过,除此之外,我绝对同意你的看法。哦,是的,我刚刚注意到输出是向后的,我很感激你的提醒!也许he的意思是使用链表,是自己写链表。使用内置链表与使用其他容器没有太大区别。