草庐IT

type1Vector

全部标签

c++ - 在用户定义的类中清空 std::vector 时未释放内存

当std::vector时我们遇到了一些内存问题是一个类的字段。我们用大量数据填充这个vector,在程序的某个时刻需要释放这些数据。然而,即使vector容量为零,内存也没有释放或完全释放。这里是我们程序的简化版本。如您所见,类Foo只有一个字段:astd::vector.如果我们创建一个std::vector并填写Foo对象,当我们清空每个对象内部的vector时,内存并没有完全释放。我们使用事件监视器测量了内存使用情况,您可以在每个日志行旁边看到每个阶段使用的字节数。此外,我们添加了另一个不使用类Foo的版本对象,在这种情况下,内存被完美释放。#include#includecl

c++ - vector - 当元素有 const 成员时交换两个元素

我有以下代码classa{public:constintaa;a(intaa):aa(aa){}};intmain(){std::vectorv;v.emplace_back(1);v.emplace_back(2);v.emplace_back(3);v.emplace_back(4);std::iter_swap(v.begin()+1,v.rbegin());system("pause");return0;}当我尝试交换vector的两个元素时出现错误。ErrorC2280'a&a::operator=(consta&)':attemptingtoreferenceadelete

c++ - 警告 : function uses 'auto' type specifier without trailing return type

下面的代码给出了下面的警告。有人可以解释原因吗(请注意代码没有用,因为我用int替换了我的类型来制作一个完整的示例)。警告:“MaxEventSize()”函数使用“auto”类型说明符而没有尾随返回类型[默认启用]想法是获取特定结构的最大大小(类型位于int所在的位置)。templateconstexprTcexMax(Ta,Tb){return(a 最佳答案 auto返回类型“没有尾随返回类型”是C++14的一个特性,所以我想你正在编译C++11。您的代码适用于C++14,但对于C++11,如果您想使用auto作为返回类型,您需

c++ - vector in struct 耗时吗?使用指针更好吗?

我在C++中有一个这样的结构:structMyStruct{someTypev1;someType2v2;someType3v3;someType4f1();std::vectormyVector;};它会经常以这样的形式使用://someprocess...afterwhichastd::vectorvec1isgeneratedMyStructmyStruct;myStruct.myVector=vec1;由于vec1比较大。我想知道通过执行分配myStruct.myVector=vec1;是否花费很多时间我是否应该在MyStruct中使用指向myVector的指针来使其更快?如何

c++ - g++ 使用 "expected a type, got ' xyz' 拒绝我的简单仿函数”

我一直在研究C++中的仿函数。特别是,我有一个vector对,我想按对的第一个元素排序。我开始编写一个完全专门化的仿函数(即类似“boolMyLessThan(MyPair&lhs,MyPair&rhs)”的东西)。然后,仅仅因为这类东西很有趣,我想尝试编写一个通用的“将F应用于这对的第一个元素”仿函数。我写了下面的内容,但g++不喜欢它。我得到:错误:“templatestructPair1stFunc2”的模板参数列表中参数2的类型/值不匹配错误:需要一个类型,得到的是“less”#include#include#include#includetemplatestructPair1

c++ - 为什么我们在定义指针时使用 "type * var"而不是 "type & var"?

我是C++的新手(断断续续有大约一年的经验)。我很好奇是什么导致决定将type*name作为定义指针的语法。在我看来,语法应该是type&name因为&符号在代码中的其他任何地方都使用来引用变量的内存地址。因此,使用int指针的传统示例:inta=1;int*b=&a;会变成inta=1;int&b=&a我确信这其中有一些我没有看到的原因,我很想听听C++老手的一些意见。谢谢,-S 最佳答案 C++采用了C语法。正如“TheDevelopmentoftheCLanguage”(DennisRitchie着)中所揭示的那样,C在类型声

c++ - 哪种转换是从 Type* 到 void*?

在C++中,对于任何数据类型,我都可以执行以下操作:Type*typedPointer=obtain();void*voidPointer=typedPointer;当我将Type*分配给void*时执行哪个转换?这和Type*typedPointer=obtain();void*voidPointer=reinterpret_cast(typedPointer);还是其他Actor? 最佳答案 这是一个标准的指针转换。由于它是标准转换,因此不需要任何显式转换。如果您想使用显式转换重现该转换的行为,则应使用static_cast,而

c++ - 根据 size() 排序 vector

我有一个像vector>v(points);这样的二维vector其中坐标类是:classcoordinate{public:intx;inty;coordinate(){x=0;y=0;}};积分是20。如何基于v[i].size()对单个vectorv[i]进行排序,即基于插入v[i]的坐标对象的数量。??? 最佳答案 1)创建一个根据大小比较两个vector的函数:boolless_vectors(constvector&a,constvector&b){returna.size()2)用它排序sort(v.begin(),v

c++ - 使用默认构造函数初始化 std::vector

我有一个类字段,它是一个std::vector。我知道我希望这个vector包含多少个元素:N。如何用N个元素初始化vector? 最佳答案 std::vector有一个构造函数声明为:vector(size_typeN,constT&x=T());您可以使用它来构造包含N个x拷贝的std::vector。x的默认值是初始化值T(如果T是具有默认构造函数的类类型,则值初始化是默认构造)。使用此构造函数初始化std::vector数据成员非常简单:structS{std::vectorx;S():x(15){}}

c++ - 如何在 C++03 中使用 "dereference a type"?

如何在C++03中获取另一种类型的“解引用类型”?请注意,它可以是其他可取消引用的类型,例如std::vector::iterator.例如如果我有templatestructMyPointer{Tp;???operator*(){return*p;}};我怎样才能弄清楚用什么替换???和?(没有提升!我想知道如何自己解决。) 最佳答案 templatestructdereference;templatestructdereference{typedeftypenameTtype;};templatestructMyPointer{