簡體   English   中英

在std :: list中找到

[英]find in std::list

嗨,我從以下代碼獲取編譯錯誤。 我不知道:

g++ stl_list_1.cc
stl_list_1.cc: In function \u2018int main()\u2019:
stl_list_1.cc:16: error: \u2018struct std::_List_iterator<int>\u2019 has no member named \u2018clist\u2019
stl_list_1.cc:19: error: \u2018struct std::_List_iterator<int>\u2019 has no member named \u2018clist\u2019
stl_list_1.cc:25: error: no match for call to \u2018(std::list<std::_List_const_iterator<int>, std::allocator<std::_List_const_iterator<int> > >) (int&)\u2019

碼:

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

main()
{
    std::list<int> clist;
    for (int i =0; i<10; i++)
    {
        clist.push_back(i);
    }

    std::list<std::list<int>::const_iterator> list1;

    std::list<int>::iterator itr1;
    itr1 = std::find(clist.begin().clist.end(),1);
    std::list<int>::iterator itr2 ;

    itr2 = std::find(clist.begin().clist.end(),7);

    list1.push_back(itr1);
    list1.push_back(itr2);

    for(int j =0; j< list1.size(); j++)
    {
       int k = *list1[j];
       std::cout << "cvalue " << k <<std::endl;
       j++;
     }
}

謝謝Ruchi

這是一個錯字,您使用了點而不是逗號:

itr1 = std::find(clist.begin().clist.end(),1);
                              ^

應該是這樣的:

itr1 = std::find(clist.begin(), clist.end(),1);

您在兩次調用std::find都犯了這個錯誤。

另外,您正在嘗試在列表上使用operator[] ,這將不起作用。 代替:

int k = *list1[j];

您可以使用:

itr1 = list1.begin();
std::advance(itr1, j);
int k = *itr1;

如JohnB所述,以上代碼效率低下。 隔離,是一樣的,但是由於您是在循環內使用它,因此最好只使用列表迭代器執行迭代:

for(itr1 = list1.begin(); itr1 != list1.end(); ++itr1)
{
   int k = *itr1;
   std::cout << "cvalue " << k <<std::endl;
}

另外,請記住

list1[j]

不起作用,因為列表沒有索引運算符,因此您必須對其進行迭代。

建議:使用std::vector< int >代替std::list< int >

至於其他人都注意到有一個在一個錯字find電話( .代替, )。

但是,一旦您超過該list就沒有[]運算符,因此您會發現該部分也不起作用。 您將需要使用迭代器在最終循環中遍歷列表。

int k = *list1[j];

那也不會編譯。

也許這樣的事情可能(不檢查任何安全性等,這是一種廢話,而只是顯示)

int k = *(find(clist.begin(), clist.end(), j));

同樣,您將j遞增兩次,這是您的意思嗎?

for(int j =0; j< list1.size(); j++) //here
{
   int k = *list1[j];
   std::cout << "cvalue " << k <<std::endl;
   j++; //and here?
}

暫無
暫無

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

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