草庐IT

auto_mapping

全部标签

c++ - 检测迭代器是否是 std::map 的最后一个元素

这类似于thisquestion但不是重复的。我正在尝试遍历map并打印每个元素的值,但最后一个元素的输出略有不同。在那个问题中,他们建议使用map.rbegin().base(),但它对我不起作用。这是我的代码:#include#includeintmain(){std::mapcharMap={{'a',1},{'b',2},{'c',3},{'d',4}};for(autoiter=charMap.begin();iter!=charMap.end();iter++){std::coutfirstsecond;if(iter==charMap.rbegin().base())st

c++ - auto* 在编译时有用还是 auto 关键字就足够了?

由于auto关键字在编译时获取类类型,我想知道使用auto*是否有任何效率,或者是否有任何特殊用途该表达式,因为auto在编译时已经获得了指针类型。 最佳答案 这个“新奇的C++11”与高效编译没有任何关系,除了在非常奇怪的极端情况下。所有这些都是为了让人类更容易编写和理解代码。auto*让您清楚地知道您拥有一个指针类型的值,并且编译器仅将其用作额外的类型检查标准,并且如果该类型不是指针类型,则会发出诊断信息——您的代码将出现格式错误,这是一个硬错误。我不记得auto*是否可以作为消歧器参与类型推导,但如果可以,那将是使用它的技术原

c++ - 在 c++ 中加速 map<string,int> .find() 的最快方法。按键按字母顺序排列的位置

我有一张包含大约100,000对的map。有什么方法可以在使用find()时加快搜索速度,因为键是按字母顺序排列的。另外我应该怎么做。我知道您可以在创建map时指定一个新的比较器。但这会加速find()函数吗?提前致谢。[已解决]感谢一群人,我决定使用vector并使用下界和上界来“剪断”一些搜索。我也是新来的,有什么方法可以将这个问题标记为已回答,或者选择一个最佳答案吗? 最佳答案 不同的比较器只有在设法更快地进行比较时才会加快查找速度(这对于字符串通常非常困难)。如果您基本上是按顺序插入所有数据,然后进行搜索,则使用std::v

c++ - Foreach 范围迭代 vector<int> - auto 或 auto&?

游戏引擎微优化情况:我正在使用C++11范围for循环迭代vector,与auto关键字。什么更快:for(autovalue:ints)...或for(auto&value:ints)...? 最佳答案 在关心哪个更快之前,你应该关心哪个在语义上是正确的。如果你不需要改变被迭代的元素,你应该选择第一个版本。否则,您应该选择第二个版本。当然,您可能会反对,即使您不需要更改vector的内容,仍然可以选择使用对const的引用:for(autoconst&value:ints)然后问题就变成了:哪个更快?通过引用const还是通过值?

c++ - map 什么时候变得比两个 vector 更好?

map对其所有元素进行二分搜索,这具有对数复杂度——这意味着对于足够小的对象集合,map的性能将低于具有线性搜索的两个vector。对象(键)池应该有多大才能使映射的性能开始优于两个vector?编辑:问题的更一般化版本:对象池应该有多大才能使二分搜索的性能优于线性搜索?我使用字符串作为键,值是指针,但我的特定用例可能无关紧要。我比较想了解如何正确使用这两个工具。 最佳答案 如果你能原谅我这么说的话,大多数答案对我来说就像是在用各种方式说:“我不知道”,而不是真的承认他们不知道。虽然我大体上同意他们给出的建议,但他们似乎都没有尝试直

c++ - C++11 中的 auto 关键字奇怪行为

只是理论问题-为什么我不能写这样的代码:autoautofoo=0;第一个auto关键字-存储类说明符(是的,我知道它在C++11中没有用且已弃用),第二个auto关键字-auto类型说明符。怎么了?再一次-我真的不想在实际代码中使用它。 最佳答案 auto存储类说明符并非“在C++11中无用且已弃用”,它已被完全删除。auto关键字不再是存储类说明符,不能用作一个说明符。在C++11中,auto是一个简单的类型说明符。 关于c++-C++11中的auto关键字奇怪行为,我们在Stack

C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因

文章目录一、引用1.1引用概念1.2引用特性1.3常引用1.4使用场景1.4.1做参数1.4.2做返回值1.5引用和指针的区别1.6小结一下二、内联函数2.1内联的概念2.2内联的特性2.3【面试题】三、auto关键字(C++11)3.1类型别名思考3.2auto简介四、auto的使用细则4.1基于范围的for循环(C++11)4.2范围for的使用条件五、指针空值nullptr(C++11)一、引用1.1引用概念C++是C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用(reference)就是C+

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - 如何使用基于范围的 for 循环修改 map 中的值?

我有一个基于范围的for循环来迭代foobar中的元素,如下所示:#include#includeintmain(){std::mapfoobar({{1,1},{2,2},{3,3}});for(autop:foobar){++p.second;std::cout此代码产生以下输出:{1,2}{2,3}{3,4}{1,1}{2,2}{3,3}第一行在for循环中被修改和打印,第二行应该打印相同的修改值。为什么输出不匹配?对std::map的更改是否仅在循环范围内有效?有没有一种方法我不仅可以访问而且可以修改这些值?Arunningversionofthiscode可以在cpp.sh上

c++ - std::move 与 std::auto_ptr 相比?

我可以用C++11中的“移动”(右值引用)做什么我不能用std::auto_ptr做什么?(据我了解,它们是一个想法的不同实现。)老问题又来了:std::auto_ptr是这么糟糕的组件吗? 最佳答案 C++98/03没有真正“可移动”类的概念。auto_ptr是一个具有transfer-on-copy-semantics的类,即当您制作拷贝时,原始内容会发生变化(注意带有非常量参数的复制构造函数!)。这是不好的。这样的类不能在标准容器中使用。由于新添加的右值引用概念,C++11引入了真正可移动类的概念。新的unique_ptr完全