C ++列表迭代器到整数转换?

时间:2014-02-28 21:11:05

标签: c++ stl iterator

大家好我有一个列表迭代器类型,我想将其转换为UINT。

std::set<UINT> volSet;
UINT ssidBase = 1;
UINT ssidEnd = 2;
volSet.insert( ssidBase );
volSet.insert (ssidEnd);
UINT ssidStart =  evf::volSet.begin(); 

我希望将volSet中的第一个值设置为ssidStart。我跑这个时出错了吗?

cannot convert 'std::_Tree<std::_Tset_traits<unsigned int, std::less< unsigned int>, std::allocator< unsigned int>, false> >::iterator' to 'UINT' in initialization

感谢任何帮助?

2 个答案:

答案 0 :(得分:1)

因此,C ++中的迭代器基本上都是指针。

所以一般的想法是你需要dereference迭代器来访问它指向的实际值,如下所示:

UINT number = *(container.begin());

答案 1 :(得分:1)

目前尚不清楚插入一个然后插入两个的目的是什么。当然,可以在以后插入更多的无符号值。但是,通过插入一个,唯一可能较低的其他可能值为零。 STL set,map,unordered_set和unordered_map容器(现在称为标准库)的insert方法返回一对。

插入方法参考链接:
设置
http://www.cplusplus.com/reference/set/set/insert/

地图
http://www.cplusplus.com/reference/map/map/insert/

unordered_set
http://www.cplusplus.com/reference/unordered_set/unordered_set/insert/

unordered_map
http://www.cplusplus.com/reference/unordered_map/unordered_map/insert/

如果元素已经存在于集合中,则第一对元素是指向现有元素的迭代器,第二个元素设置为false。如果成功插入(例如,键中的键尚未存在),则该对中的第一个元素指向已成功添加的元素,第二对元素设置为true。

使用set来保证第一个(最低)元素(例如,begin()方法将始终返回指向迭代器,除非set为空),确保始终在常量中找到集合中的最小值时间(例如O(1);一个人的大哦)。

C ++ 11中包含一些值的编码示例。

std::set<UINT> volSet;
pair <std::set<UINT>::itertor, bool> p;

//
// Using the same notation on unsigned int for consistency,
// insert 500 unsigned values into the volSet container.
//
for (UINT i = 500; i >= 0; i--)
{
    p = volSet.insert(i);
    if (p.second == false)
    {
       cerr << "volSet insertion warning!! The value for volSet already has: ";
       cerr << i << endl;
    }
}


//
// Do business logic, deletions/insertions from/to the volSet, and so on...
//
// Now obtain the lowest value inside the volSet and set it to a local variable.
// It is assumed that evf is a user defined namespace.
//
std::set<UINT>::iterator ii = evf::volSet.begin();
UINT ssidStart =  *ii;


//
// Alternatively, implement without declaring a local iterator as Victor
// has shown above.  Note that the parenthesis here are important.  The call
// to begin() has to occur prior to the dereference operator call.
// Note that the sample above intentionally sets the ii iterator 
// before dereferencing.
//
UNIT lowValue = *(evf::volSet.begin());

我希望这有助于理解迭代器和容器元素之间的区别。