簡體   English   中英

如何在C ++中創建鏈接列表的向量?

[英]How do you create a vector of linked lists in C++?

我聲明了鏈表的向量(鏈表包含int值)。 然后,我嘗試將值推入鏈表( i只是向量中的一個位置):

vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);

問題是當我運行上述命令時我遇到了分段錯誤,但我不知道為什么。 我查閱了C ++文檔,並且格式看起來正確。 有任何想法嗎?

向量從零開始,您必須先創建向量元素,然后再推入[i]的列表。

如果您的i以正常方式前進,則可以先將push_back()拖到矢量上,然后push_back()到矢量列表中。 如果沒有,您可以添加一些難看的東西,例如:

if ( adjacencyVector.size() <= i ) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);

您必須在vector添加list<int>的實例,然后才能通過索引訪問特定的list<int> ,然后可以在list<int>上調用push_back() 因此,要么push_back()list<int>插入向量中:

vector< list<int> > adjacencyVector;

list<int> l;
adjacencyVector.push_back(l);
...
adjacencyVector[0].push_back(s);

或調用向量的resize()方法一次添加多個列表:

vector< list<int> > adjacencyVector;

adjacencyVector.resize(number of lists);
...
adjacencyVector[index].push_back(s);

如果您使用的是for循環,那么您可能已經知道最大大小了,因此可以使用如下的resize方法:

adjacencyVector.resize(MAXSIZE)

然后,我嘗試將值推入鏈表。

您試圖訪問一個不存在的對象。 adjacencyVector [i]列表不存在,因為如果您未在其中添加元素,則adjacencyVector是一個空向量。

以下示例將使一些細節變得清晰。

#include <iostream>
#include <vector>
#include <list>

int main()
{
    std::vector<std::list<int> > v; // This statement creates an empty vector of lists of integers.
    std::list<int> l; // This statement creates an empty list of integers.
    for(int i=0; i<10; ++i){
        l.push_back(i);
        v.push_back(l);
    }
    for(unsigned int i=0; i<v.size(); ++i){ // You can access elements calling the operator[].
        for(std::list<int>::iterator it=v[i].begin(); it!=v[i].end(); ++it){
            std::cout<<*it<<' '; // You can access elements calling the operator[] , you need an iterator.
        }
        std::cout<<std::endl;
    }
    //std::cout<<*(v[v.size()].begin())<<std::endl; // It causes segmentation fault, because v[10] does not exist,
                                                  // 10 is out of range of valid indexes.
}

向量和列表的退出類似。 如果使用列表,則插入和刪除更為有效,但如果使用矢量,則訪問元素通常更為有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM