1

我是使用 c++ 的新手,我真的不知道如何使用 STL 列表。我正在制作城市街道交叉口的图表。这是我的结构/头文件:

全局标头

#ifndef GLOBAL_H
#define GLOBAL_H

typedef struct Vertex_ vertex;
typedef struct Edge_ ege;

#endif

顶点标头

#ifndef VERTEX_H
#define VERTEX_H
 #include<list>
#include "global.h"
#include "edgelist.h"
struct Vertex_{
    int xsect;
    int danger;
    char xstreet[25];

    list<Edge_> EdgeList;
    struct Vertex_ *next;
    struct Vertex_ *prev;
};   

 #endif

边缘标头

#ifndef EDGE_H
#define EDGE_H

#include "global.h"
#include "vertex.h"
struct Edge_{
    Vertex_ *adjvertex;
    int distance;

    struct Edge_ *next;
    struct Edge_ *prev;
};  

#endif

我的导师没有给我们任何关于 c++ 的注释,所以真的不知道如何开始图表。以下是我想开始我的主要工作的方式:

#include<iostream>
#include<list>
#include "vertex.h"
#include "edge.h"
#include "global.h"
int main(){
   list<Vertex_> xsection;
   list<Edge_> EdgeList;
}

我必须从另一个文件中扫描数据,所以我真的不知道列表的大小。问题是我是否需要初始化列表的大小,或者我是否可以使用迭代器添加内容。另一个问题是如何访问此列表元素中的数据。我会只使用迭代器并拥有:

*iter->EdgeList.begin(); 

如果有人拥有一个包含 STL 列表的所有命令和功能以及如何使用它的网站,那将是非常棒的,因为我目前打开了 10 个网站,只是为了看看这些列表是如何工作的。

4

1 回答 1

4

您不需要初始化列表的大小,只需使用std::list.push_back()或添加新元素即可std::list.push_front()

我喜欢这个列表链接: http ://www.cplusplus.com/reference/list/list/

这适用于一切: http ://www.cplusplus.com/reference/

cplusplus.com 的一个好处是它们指定了函数调用的复杂性(如果这是由标准定义的)。

关于您在评论中的问题,std 是一个命名空间,您可以通过添加来导入它,using namespace std;因此您不需要编写std::list. 在 C++ 中,您可以有多个命名空间,每个命名空间都实现自己的list.

list表示包含类型元素的模板列表Xstd::list是一个 STL 列表。

这是一个简单的例子:

int main(void) {
    std::list<std::string> l;
    l.push_back("overflow");
    l.push_back("test");

    /* Access it through iterators */
    /* iterators are kinda like pointers, but each ++ moves to the next item */
    std::list<std::string>::iterator it;
    for(it = l.begin(); it != l.end(); it++) {
        std::cout << "item: " << *it << std::endl;
    }

    l.push_front("stack");
    std::cout << *l.begin() << std::endl;

}

这是工作代码:http: //ideone.com/R8sQhH

如果您使用的是 struct :

struct test {
    string tmp;
};

void somefunction() {
    std::list<test> l;
    /* code */
    std::cout << (l.begin())->tmp << std::endl;
}

完整的结构示例: http: //pastebin.com/YETUq1xT

于 2012-12-04T18:48:26.983 回答