如何制作一个指向列表迭代器的指针,以作为参数传递到函数中

How can I make a pointer to list iterator to pass into function as an argument?

本文关键字:指针 参数传递 函数 迭代器 何制作 一个 列表      更新时间:2023-10-16

我有这个函数names_list()来显示列表,我想将对我的字符串列表迭代器的引用传递给这个函数并打印整个列表。

#include <iostream>
#include <list>
using namespace std;
void names_list(list<string>::iterator *i,list<string> *n){
     while(*i != *(n.end()))
    {
        cout<<i<<endl;
        i++;
    }
}
int main(){
    list<string> names;
    list<string> *name_ptr = names;
    names.push_back("vivek");
    names.push_back("Anup");
    names.push_back("kali");
    list<string>:: iterator iter = names.begin();
    names_list(&iter,&name_ptr);
    return 0;
}

我该怎么做?

实现函数的最佳方法是按值传递 2 个迭代器(这是 C++ 标准库中的算法数量):一个迭代器到列表的开头,一个迭代器到列表的末尾:

void names_list(list<string>::iterator beg, list<string>::iterator end){
    while( beg != end)
    {
        cout << *beg++ << endl; // we increment here
    }
}

然后简单地调用你的函数

names_list(names.begin(), names.end());

通过这种方式,您可以将算法与数据结构分开。更好的是,您可以通过模板传递任意迭代器,然后您的函数将与任意容器一起工作:

template<typename T>
void names_list(typename T::iterator beg, typename T::iterator end)
{
    while( beg != end)
    {
        cout << *beg++ << endl; // we increment here
    }
}
for (std::set<std::string>::const_iterator it = NameList.begin(); it != NameList.end(); ++it)
    std::cout << *it << std::endl;

迭代器取消引用 (*it) 将为您提供包含名称的字符串。

在您的方法中,您应该传递对名称列表的引用,并使用我提供的代码打印每个名称。

编辑 最终代码将如下所示:

void names_list(list<string>& n){
    for (list<string>::const_iterator it = n.begin(); it != n.end(); ++it)
        std::cout << *it << std::endl;
}
int main()
{
    list<string> names;
    names.push_back("vivek");
    names.push_back("Anup");
    names.push_back("kali");
    names_list(names);

    system("pause"); // return 0
}

确保包含以下库:iostream、列表、字符串