如何创建一个指向列表迭代器的指针以作为参数传递给函数?

时间:2015-05-01 16:38:04

标签: c++ list pointers iterator

我有这个函数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 个答案:

答案 0 :(得分:1)

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,list,string

答案 1 :(得分:1)

实现函数的最佳方法是按值传递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
    }
}