草庐IT

mapped_type

全部标签

c++ - std::map::begin() 之前的 STL 迭代器

在C++11的std::map中,是否有一些有效的迭代器x使得++x保证等于map::开始()?我想检测我刚刚调用的函数(我的)是否已经将迭代器从函数的前面移开。该函数会将迭代器恰好向后移动一个位置。答案是否适用于图书馆的其他人? 最佳答案 不,std容器中开始之前的迭代器都是UB(反向迭代器除外,它可能无法解决您的问题)。您可能需要修复有问题的函数。如果做不到这一点,请将其包装起来并在调用它之前捕获不良行为。如果做不到这一点,您可以在map键类型排序中插入一个负无穷大元素,并添加一个标记值。如果做不到这一点,您可以编写迭代器适配器

c++ - 循环中的 Stroustrup 和溢出 size_type

我正在阅读BjarneStroustrup的“使用C++的编程原则和实践”,我需要对我在第25.5.3节中发现的令人惊讶的部分进行澄清。作者声称如果我们想遍历std::vector,然后使用像这样的循环变量for(vector::size_typei=0;i不如对vector使用迭代器安全类:for(vector::iteratorp=v.begin();p!=v.end();++p)因为,作为无符号类型,i可能会溢出。他指出使用迭代器的循环没有这样的限制。我有点困惑,因为我了解到size_type保证足够大以表示可能的最大vector,因此size_type类型的变量永远不会在这样的

C++ vector::size_type:有符号与无符号;整数与长

我一直在通过在不同平台上编译我的应用程序来对其进行一些测试,从64位系统到32位系统的转变暴露出许多问题。我大量使用vector、字符串等,因此需要对它们进行计数。但是,我的函数也使用32位无符号数,因为在许多情况下我需要显式使用正整数。我在处理看似简单的任务时遇到了问题,例如std::min和std::max,它们可能更系统化。考虑以下代码:uint32_tgetmax(){return_vecContainer.size();}看起来很简单:我知道一个vector不能有负数的元素,所以返回一个无符号整数是完全合理的。voidsetRowCol(constuint32_t&r_row

c++ - "lightweight type categorization idiom"的最简单实现?

我的目标是实现一个检测嵌套using是否存在的谓词别名(或typedef)充当轻量级标签以指示类具有某些属性(用于泛型编程)。例如,has_my_tag谓词的行为应如下所示:structA{usingmy_tag=void;};structB{};intmain(){static_assert(has_my_tag::value,"");//evaluatetotrueifmy_tag=voidispresentstatic_assert(!has_my_tag::value,"");//falseotherwise}用户@JoelFalcou称其为“轻量级类型分类成语”并在thisa

c++ - std::map 和已插入数据的行为

插入新数据时,std::map是否移动已插入的值? 最佳答案 map被实现为一棵树,当你插入一个新元素时,树可能需要重新平衡。这不会使任何迭代器或对树中元素的引用无效。这种平衡是通过指针的操作来完成的,所以你没有什么可担心的;节点本身保持不变。平衡涉及通过重新分配指针告诉节点他们的child、parent和sibling是谁,从而改变树的结构,但这是一个实现细节。从逻辑上讲,一切都没有改变。 关于c++-std::map和已插入数据的行为,我们在StackOverflow上找到一个类似的

c++ - map<..,..> 的第二部分是否稳定?

如果我们有一个map>是vectors在map的红黑树发生变化或它存储指向vector的指针时移动s或类似的东西并且不移动它们(否则使用map将不再是O(lgn)例如,如果我们将元素push_back到一些vectors) 最佳答案 看这个:std::map,pointertomapkeyvalue,isthispossible?第二个最佳答案:Section23.1.2#8(associativecontainerrequirements):"Theinsertmembersshallnotaffectthevalidityofi

c++ - 编译错误 : base operand of ‘->’ has non-pointer type ‘Token’

我在尝试编译我的C++代码时遇到标题中提到的错误。我无法理解我在这里做错了什么。编译器在我执行booloperator==(Token)函数时出现问题。我认为这是使运算符(operator)重载的方法。关于为什么编译器不喜欢我提到的任何线索this->terminal还是this->lexeme?classToken{public:tokenTypeterminal;std::stringlexeme;Token*next;Token();booloperator==(Token&t);private:intlexemelength,line,column;};boolToken::o

c++ - unordered_map - {{key,value},{key,value}} 语法无效

我正在尝试编译thecodetakenfromhere//constructingunordered_maps#include#include#includetypedefstd::unordered_mapstringmap;stringmapmerge(stringmapa,stringmapb){stringmaptemp(a);temp.insert(b.begin(),b.end());returntemp;}intmain(){stringmapfirst;//emptystringmapsecond({{"apple","red"},{"lemon","yellow"}}

c++ - knnMatchImpl 中的断言失败 (queryDescriptors.type() == trainDescCollection[0].type()),

当使用BOWImgDescriptorExtractor和DescriptorExtractor作为SIFT和DescriptorMatcher作为ButeForce我我收到错误信息OpenCVError:Assertionfailed(queryDescriptors.type()==trainDescCollection[0].type())inknnMatchImpl,我有什么错误。当我尝试计算时例如。bowide->compute(img,keypoints,response_hist); 最佳答案 我在使用带有BFMatc

c++ - 是否可以使用 n 键初始化 std::map,其中 n 是预定义的?

我想知道是否可以用nkey:value元素初始化一个std::map,其中n是预定义的(类似于数组初始化:array[n])。我不知道std::map存在这样的构造函数,但我想我可以问一下以防万一。或者,我们可以做的是:#include#includeintmain(){intn=5;std::maprandomMap;for(inti=0;i 最佳答案 当然,你可以使用初始化列表,例如intmain(){std::maprandomMap{{0,1.5},{3,2.7},{9,1.9}};for(autoconst&element