gpt4 book ai didi

c++ - 使用映射迭代器编译错误

转载 作者:可可西里 更新时间:2023-11-01 17:05:49 25 4
gpt4 key购买 nike

在我的头文件中,我包含了 std::map 并使用了适当的命名空间。
我的成员之一是:

map<unsigned int, double> pT_Spam;

在我的 .cpp 文件中,我尝试做一些我现在经常做的事情:

for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}

上面甚至在 cplusplus.com 上使用 std::map 的例子中提到过。尽管我在代码的其他部分做了几乎相同的操作而不会导致编译错误,但在这一行我从 Cygwin 收到以下错误:

error: conversion from `std::_Rb_tree_const_iterator<std::pair<const unsigned int, double> >' to non-scalar type `std::_Rb_tree_iterator<std::pair<const unsigned int, double> >' requested

这看起来很奇怪。知道可能出什么问题了吗? (当然,我的 header 包含在我的 .cpp 中)

最佳答案

在这个循环存在的范围内,映射似乎是常量。例如,类方法中的循环是否像这样声明为 const?

void method() const // const method
{
// Do stuff.
}

或者像这样作为常量参数传递?

void function(const map<unsigned int, double>& pT_Spam)
{
// Do stuff.
}

如果是,则必须使用 const 迭代器:

for(map<unsigned int, double>::const_iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++)
{
/*code*/
}

或者,如果您使用的是 C++11,那么您应该使用 auto 关键字:

for(auto it=pT_Spam.begin() ; it!=pT_Spam.end(); it++)
{
/*code*/
}

由于在您展示的情况下必须使用 const 迭代器,因此您不能使用它们来修改 map 或 map 中的数据。这是 const 的正确性,这是一件好事 :)。

关于c++ - 使用映射迭代器编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com