簡體   English   中英

運算符[]不匹配(std :: vector)

[英]no match for operator [ ] (std::vector)

因此,我已經使用鄰接表制作了一個圖,並且嘗試使用遞歸來搜索它。 收到一個尷尬的錯誤消息,提示“操作符[]不匹配”。 這是代碼:

#include <iostream>
#include <vector>
using namespace std;


void search(vector <int> *v,int node)
{
    if (node==4)
    {
        cout<<"found 4";
        return;
    }

    vector <int> :: iterator it;
    if (!v[node].empty())
    {
        for (it=v[node].begin() ; it!=v[node].end() ; it++)
        {
            search(v,v[node][it]);
        }
    }
}

int main()
{
    vector <int> v[5];
    v[1].push_back(2);
    v[1].push_back(3);
    v[2].push_back(4);
    v[2].push_back(5);
    search (v,1);
}

可變it是一個迭代。

vector <int> :: iterator it;

這不能用於索引到這樣的數組:

search(v,v[node][it]); // Expecting an index not an iterator.

我認為您想要取消對迭代器的引用。

search(v, *it);

您必須檢查節點是否未超出范圍。

嘗試這個:

#include <iostream>
#include <vector>
using namespace std;
void search(vector<int> *v, int count, int node)
    {
       if (node == 4)
       {
        cout << "found 4";
       return;
    }

    if (node < count && !v[node].empty())
    {
        for (auto it = v[node].begin(); it != v[node].end(); it++)
        {
            search(v, count, *it);
        }
    }
}

int main()
{
   vector<int> v[5];
   v[1].push_back(2);
   v[1].push_back(3);
   v[2].push_back(4);
   v[2].push_back(5);

   search(v, sizeof(v) / sizeof(v[0]), 1);
   return 0;
}

在您的代碼中, v指向向量的指針 (代表數組)。 要訪問下標運算符,必​​須首先使用v[first_index]訪問C樣式數組。 然后,您必須索引從第一次索引獲得的所有返回對象。 但是,您甚至不應該對向量使用指針。 如果要修改容器,請通過引用傳遞它。 如果要存儲向量數組,則建議您僅嵌套它們(盡管這可能對內存不利,因此可以創建一維向量並計算索引)。

暫無
暫無

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

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