草庐IT

STL-Like

全部标签

运算符的 C++ 链接 << for std::cout like usage

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:std::endlisofunknowntypewhenoverloadingoperatorOperatoroverloading我目前正在编写一个记录器类,但是operator方法导致编译器错误。这是该类的最小化版本,位于文件“logger.h”中:#includeclassLogger{public:Logger():m_file(std::cout){}templateLogger&operator它包含在我的main.cpp中,当我输出字符串文字时它可以完美地工作:log但是,下面的代码不会编译。#

c++ - STL 容器如何复制对象?

我知道像vector这样的STL容器会在添加对象时复制对象。push_back方法如下所示:voidpush_back(constT&x);我很惊讶地看到它将项目作为引用。我写了一个示例程序来查看它是如何工作的。structFoo{Foo(){std::coutfoos;foos.push_back(f);这会复制对象,我可以看到它正在调用copy-constructor。我的问题是,当push_back将item作为引用时,它是如何调用复制构造函数的?或者我在这里遗漏了什么?有什么想法..? 最佳答案 它可能使用“placemen

c++ - STL迭代器相等性是如何建立的?

我想知道,STL迭代器的相等性(==)是如何建立的?它是简单的指针比较(因此基于地址)还是更花哨的东西?如果我有来自两个不同列表对象的两个迭代器并比较它们,结果是否总是错误的?如果我将一个有效值与超出范围的值进行比较怎么办?这总是错误的吗? 最佳答案 如果需要,迭代器类可以定义重载的==运算符。所以结果取决于operator==的实现。您真的不应该比较来自不同容器的迭代器。我认为如果您这样做,一些调试STL实现会发出警告信号,这将帮助您在代码中发现这种错误使用情况。 关于c++-STL迭

c++ - STL 函数式——为什么?

在C++标准模板库中,有一个“功能”部分,其中许多类重载了它们的()运算符。在C++中将函数作为对象使用有什么便利吗?为什么我们不能只使用函数指针呢?有什么例子吗? 最佳答案 当然,人们总是可以使用函数指针而不是函数对象,但是函数对象相对于函数指针有一些优势,即:更好的性能:最明显和最重要的优势之一是它们更有可能产生更好的性能。在函数对象的情况下,更多细节在编译时可用,以便编译器可以准确地确定并因此内联要调用的函数,这与函数指针的情况不同,在函数指针的情况下,指针的取消引用使编译器难以确定实际函数将被调用。函数对象是智能函数:函数对

c++ - 我可以在 STL::vector::iterator 上做指针运算吗

目前我使用迭代器来搜索vector并测试其元素。我使用访问元素std::vector::iteratorit;if(*it==0);我能否使用相同的指针算术风格逻辑来测试下一个元素(不改变我的迭代器)?我首先需要看看它是否会将迭代器推出边界if(it!=myvec.end())然后测试当前元素和下一个元素if(*it==1&&*(it+1)==1)这会像我预期的那样使用指针工作吗? 最佳答案 是的,std::vector的迭代器是randomaccessiterators所以你添加/减去整数值以获得其他有效的迭代器。从技术上讲,它可

c++ - 如何使用 STL 集找到第一个小于搜索键的值?

例如,我在std::set中有一组值:{1,2,3,5,6}还有一个搜索键,假设为4,我想找到第一个值。小于搜索键,在这种情况下为3,怎么办?在Java中,TreeSet中有函数greater()、lower() 最佳答案 只需找到lower_bound为那个键然后递减一次。seta;set::iteratorit=a.lower_bound(5);if(it!=a.begin()){it--;cout你可以找到一个完整的例子here. 关于c++-如何使用STL集找到第一个小于搜索键的

c++ - STL/ranges 算法计算加权平均值

假设我有一个成绩vector,其中成绩是structGrade{constintgrade;constintECTS;//weight};是否有STL/range-v3算法/算法可以让我做到这一点?我知道我可以用std::accumulate来做,用一些奇特的类型作为累加器(记住权重的总和),但我正在寻找一个更简单的替代方案(如果存在的话)。 最佳答案 Grade类型本身就足以充当累加器类型。auto[grade_sum,ects]=std::accumulate(grages.begin(),grades.end(),Grade{

c++ - 包装 STL 习惯用法以提高可读性是个好主意吗?

我目前正在开发一个需要尽可能少的外部依赖项的C++项目,因此我几乎坚持使用STL和Boost。直到现在,当涉及到C++时,我几乎一直生活在Qt领域。一般来说,我倾向于尽可能使用C#和Python。今天我想检查std::vector是否包含某个项目。使用Qt,我会这样做:QListlist;list.append(1);list.append(2);list.append(3);if(list.contains(2)){//dosomething}美观易读。但是std::vector没有contains方法,这是一个惊喜。好吧……类似的东西在STL中的用法是什么?找了一圈,好像是这样的:

c++ - STL 数据结构的内存使用,Windows 与 Linux

我有一个大量使用std::map的程序。在Windows下,使用的内存比在Linux下多得多。有谁知道为什么会这样?Linux:最后一个进程耗时42.31秒,使用的内存不超过909MB(RSS900MB)window:最后一个进程耗时75.373秒,使用的内存不超过1394MB(RSS1395MB)我在命令行上使用gcc4.4.3和VS2010C++编译器,并带有发布设置。编辑:抱歉这么晚才回答问题...代码如下所示:enumSymbol{...}classGraphEntry{public:...virtualvoidsetAttribute(Symbolname,Value*val

自定义插件解决MyBatis-Plus like查询遇_ % \等字符需转译问题(含分页查询)

我们使用MyBatis-Plus执行LIKE模糊查询时,若预处理参数包含_%\等字符(欢迎补充),会查询出所有结果,这不是我们需要的。不论写法是自定义SQLxxxlikeconcat('%',#{fuzzyName},'%')还是Wrapper(本质上也是生成likeSQL语句)finalLambdaQueryWrapperqueryWrapper=newLambdaQueryWrapper();queryWrapper.like(CharSequenceUtil.isNotBlank(fuzzyName),XxxPo::getName,fuzzyName);因为SQL中LIKE中_%\这些符