我该如何编写一对列表
how can I write a list of pair?
我当前正在尝试编写一对列表。我的代码是:
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <list>
using namespace std;
list<pair<string,char>> listPair;
list<pair<string,char>>::iterator it;
void printStars(list<pair<string,char>> listPair)
{
for (it=listPair.begin(); it != listPair.end(); it++)
cout << it->first <<" ";
cout << endl;
}
int main()
{
pair<string,char> mypair;
listPair.push_back(make_pair("bib",'a'));
listPair.push_back(make_pair("bob",'b'));
for_each(listPair.begin(), listPair.end(), printStars);
return 0;
}
汇编失败了:
error C2664: 'void (std::list<_Ty>)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::list<_Ty>'
您可以帮助我检测到问题到底在哪里?
您传递给 std::for_each
的函子有望接受您传递到 std::for_each
的范围的元素。您的最后一个具有pair<string,char>
元素,因此您的函子应具有以下签名:void printStars(const pair<string,char>& elem)
。
此外,要将普通功能传递给std::for_each
,您需要使用std::ref
或(在旧编译器上)std::ptr_fun
。
#include <iostream>
#include <algorithm>
#include <list>
#include <string> // missing include
#include <utility>
#include <functional>
using namespace std;
typedef list< pair<string,char> > list_t;
list_t listPair;
void printStars(list_t::reference x) // use a reference, otherwise you create a copy
{
cout << x.first << " " << x.second << endl;
}
int main()
{
pair<string,char> mypair;
listPair.push_back(make_pair("bib",'a'));
listPair.push_back(make_pair("bob",'b'));
for_each(listPair.begin(), listPair.end(), std::ref(printStars)); // C++11
for_each(listPair.begin(), listPair.end(), std::ptr_fun(&printStars)); // C++98
return 0;
}
您的问题是,您的printStars()
期望list
,但是for_each
将其传递给每个项目,而不是实际列表:
工作代码:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <list>
#include <string>
#include <utility>
list<pair<string,char> > listPair;
list<pair<string,char> >::iterator it;
void printStars(const pair<string,char> & listPair){ //notice the &, so it would pass by reference and not make a new copy of the pair.
cout << listPair.first << ' ';
}
int main() {
pair<string,char> mypair;
listPair.push_back(make_pair("bib",'a'));
listPair.push_back(make_pair("bob",'b'));
for_each(listPair.begin(), listPair.end(), printStars);
cout << endl;
return 0;
}
相关文章:
- gdb 中的列表命令不输出我编写的代码
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 为 STL 列表编写选择排序
- 如何编写循环以通过列表迭代并打印列表中每个元素的数据的数据
- 如何编写嵌套的初始分散列表,例如qpairs的qVector
- Python:我们应该如何编写一个函数来返回对象/列表和布尔标志
- 我相信我为双链接列表编写的代码中的代码质量需要少量提高
- 我一直在尝试递归中编写一个分类的链接列表函数
- 字符 * 和字符串在C++中有何不同?(在描述中编写代码)
- 试图用c++编写我自己的链表实现,在点击列表中的3个元素后编写segfault代码
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- 如何为列表编写 for 循环?
- 我该如何编写一对列表
- 生产者-消费者队列 - std::queue 或用户编写的链接列表
- 我是否必须在函数的声明和实现中编写初始化列表
- XE2 - Indy TCPServer:编写和读取列表视图的最佳方式是什么
- 编写布尔表达式以判断列表是否在增加
- 我正在编写一个排序函数,以升序对字符类型列表进行排序,如果有任何交换,则返回计数次数
- 在C#中为windows API编写COM服务器,从何开始
- 在构造函数声明中编写模板类型的参数列表是否有效?