我有这个函数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;
}
我该怎么做?
答案 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
}
}