草庐IT

EidosValue_Int_vector

全部标签

c++ - 函数返回对 vector 元素的引用

我不知道如何返回对vector元素的引用。[]和at()正在返回引用,不是吗?但是当我尝试以下操作时,它不会编译。我正在使用VisualC++,它给出了cannotconvertfrom'constfloat'to'float&错误。T&GetElement(size_tx)const{return_vector.at(x);}GetElement是方法,_vector是成员变量。 最佳答案 这不会编译,因为您试图返回对vector元素的非常量引用,该元素本身是const。vector是const的原因是您的成员函数被声明为cons

c++ - 缩小从 int 到 long unsigned int {} 的转换在 C++11 中格式错误

当我运行以下代码时-我收到警告“在C++11[-Wnarrowing]中,{}中从int到longunsignedint的缩小转换是错误的。我正在使用GNU4.8编译器。typedefstructTableEntry{unsignedlongvalue;constchar*label;}TableEntry;enumFunctionType{NORMAL=0,RANGE=1};TableEntryfunctionTypes[]={{NORMAL,"NORMAL"},{RANGE,"RANGE"}};我不明白为什么编译器将枚举视为整数?这是GCC4.8中的错误吗?有什么解决方法吗?任何帮

c++ - size_type 和 int 之间的区别

#include#includeusingnamespacestd;intmain(){vectorstudent_marks(20);for(vector::size_typei=0;i>student_marks[i];}return0;}我在某处读到,最好使用size_type代替int。它真的会对实现产生巨大影响吗?使用size_type有什么好处? 最佳答案 vector::size_type保证涵盖vector大小的所有可能值范围.一个int不是。请注意vector::size_type通常与std::size_t相同,

c++ - 将 vector 拆分为多个的最有效方法

我有以下代码将vectorOfInterest分解成更小的block来发送。此代码有效。但是,当我将vectorOfInterest拆分为更小的block时(在subList和余数的构造函数中),我做了一个拷贝。是否有更好的方法来使用移动而不是再次复制数据以获得更好的性能?请注意,我无法更改OTHERCLASS::doSend()的参数编辑:我正在使用C++98intblockSize=50;vectorvectorOfInterest;//...do{if(vectorOfInterest.size()>blockSize)vectoriteratorfrom=vectorOfInt

c++ - 比较 std::vector 的指针来检查相等性是否安全?

一次,我创建了一个指向std::vector的指针,然后我做了一些push_back、reserve、resize对该vector的操作,在这样的操作之后,将指针与该vector的地址进行比较以检查指针是否指向该vector是否安全,因为可能会重新分配内存。例如std::vectorvec;vector*pVec=&vec;vec.reserve(10000);assert(pVec==&vec);vec=anotherVec;assert(pVec==&vec);此外,将指针与vector的第一个值进行比较是否安全?例如:std::vectorvec(1,0);int*p=&vec[

c++ - 如何在不使用 to_string 或 stoi 的情况下将 int 转换为 C++11 中的字符串?

我知道这听起来很愚蠢,但我在Windows7上使用MinGW32,并且“to_string未在此范围内声明。”It'sanactualGCCBug,我关注了theseinstructions他们没有工作。那么,如何在不使用to_string或stoi的情况下将int转换为C++11中的字符串?(另外,我启用了-std=c++11标志)。 最佳答案 这不是最快的方法,但您可以这样做:#include#include#includetemplatestd::stringstringulate(ValueTypev){std::ostri

c++ - Eigen 和 std::vector

我有一个矩阵,给出如下:std::vector>>A;我想像这样将其映射到Eigen线性代数库:Eigen::Mapmat(A.data(),51,51);但是代码失败了error:nomatchingfunctionforcallto‘Eigen::Map,-1,-1>,1>::有没有办法转换vector的vector,以便Eigen可以使用它? 最佳答案 Eigen使用连续内存,std::vector也是如此。.但是,外部std::vector包含一组连续的std::vector>,每个指向一组不同的复数(并且可以是不同的长度)

c++ - 智能指针析构函数调用的 vector

为什么在下面的代码中节点析构函数只被调用一次而不是5次?#include#include#includestructNode{~Node(){std::cout>nodes(5,std::make_shared());}intmain(){foo();std::cout 最佳答案 您的vector包含原始共享指针的五个拷贝,所有拷贝都共享一个指针对象的所有权。要创建五个独立的对象,每个对象由一个共享指针拥有,可以这样写:std::vector>nodes;for(inti=0;i!=5;++i)nodes.push_back(std

c++ - 如何在不使用 boost 或创建模板的情况下在 C++ 中同时对两个 vector 进行排序?

我有两个大小相同的vectorvectorpredictions;//say{1.22,3.22,2.22,4.22}vectorindices;//say{0,1,2,3}我使用降序对预测中的值进行排序std::sort(predictions.rbegin(),predictions.rend());//gives{4.22,3.22,2.22,1.22}现在我想在预测的同时对索引进行排序。//toget{3,1,2,0}如何在不使用提升和自定义模板的情况下做到这一点? 最佳答案 您可以将这两个vector合并为一个类型,如st

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

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