草庐IT

c++ - 这会使用局部变量破坏堆栈吗?

我类有一个成员std::vector>mEnvironment;现在我编写了一个函数,将此vector作为键/值对加载到过程环境中。我不需要访问成员,所以我不使用map,并且认为vector会更好,因为我只对其进行迭代。voidEnvironment::setEnvironment(charconst*oEnvironment[]){mEnvironment.clear();if(oEnvironment==NULL)return;std::stringname;std::stringvalue;std::pairentry;for(constchar**envp=oEnvironme

c++ - 如何编写接受 std::vector 或 std::list 的函数?

我想这个问题有点简单。vector和列表都有push和pop函数,而且-更重要的是-可以迭代:for(autovalue:items)...然而,std::vector和std::list似乎并不共享一个基类。因此,问题是:我如何编写一个函数来接受其中一个(或者,实际上,任何其他适合实现的东西)?std::lista;std::vectorb;DoSomething(a);DoSomething(b);我想在不重载的情况下进行。如果使用模板,它们不应该导致疯狂的错误消息。比如下面的代码——inta;DoSomething(a);--应该会导致调用站点出现编译错误,不在模板内的某处!有人

c++ - 如何对成员函数使用隐式类型转换?

让我们考虑以下示例,了解隐式类型转换有效和无效的情况:#include#includestructThingy{voidwrite(){std::coutvoidf(TIteratorbegin,TIteratorend){for(TIteratorit=begin;it!=end;++it)it->write();}intmain(){std::vectorvector(10);f(vector.begin(),vector.end());//Doesn'tcompilef(vector[3]);//compilesvector[3].write();//Doesn'tcompile

c++ - 将一维, "flattened"索引转换为N维数组的N维 vector 索引

我有一个N维数组,每个维度都有相同数量的项目(即相同的“长度”)。给定一个数组中的一维索引,我想要一个返回与该索引关联的坐标的函数。数组的索引方式实际上无关紧要(从某种意义上说,数组的所有维度都相等,就将在数组上运行的算法而言,没有一个具有优先级)。因此,例如,如果我有一个4x4x4数组,索引63应返回[3,3,3],索引0应返回[0,0,0],索引5应返回[1,1,0].我写了下面的函数,其中nDim是维数,nBin是每个维的长度:defindicesOf(x,nDim,nBin):indices=[]foriinarange(0,nDim):index=(x/nBin**(i))%

c++ - 通过 && 在 std::vector push_back() 和 std::map operator[] 中获取参数

这个问题在这里已经有了答案:Whatismovesemantics?(11个答案)关闭9年前。我在std::vector::push_back()实现中发现了这个:voidpush_back(_Ty&&_Val){//somecodehere}这在std::mapoperator[]实现中:mapped_type&operator[](key_type&&_Keyval){//somecodehere}为什么_Val和_Keyval是按引用方式取的?通过引用引用的方式进行论证是如何工作的?与引用引用相比,这种方法有什么好处?附言这不是逻辑上的“与”,我明白这一点。

c++ - Boost.Python - vector 到 Numpy 数组

我有以下类(class):classPyWav{public:staticinlineboost::python::objectsdVecToNumpyArray(std::vectorconst&vec){npy_intpsize=vec.size();double*data=size?const_cast(&vec[0]):static_cast(NULL);PyObject*pyObj=PyArray_SimpleNewFromData(1,&size,NPY_DOUBLE,data);boost::python::handlehandle(pyObj);boost::pytho

c++ - 如何将这种重用存储撤消堆栈模式从通用 vector 调整为类型化模型?

我一直在尝试完全理解SeanParent'stalk"InheritanceIsTheBaseClassofEvil"中演示的撤消模式.演讲涵盖了很多基础知识,包括C++移动语义,以及使用概念来实现多态性而不是继承,但增量撤消存储模式是我一直试图了解的模式。这是Parent在他的演讲中给出的示例的工作改编:#include#include#include#includeusingnamespacestd;templatevoiddraw(constT&x,ostream&out,size_tposition){outobject_t(Tx):self_(make_shared>(mov

c++ - 构建一个 vector 以允许未初始化的存储

假设我想构建一个vector容器,unlikestd::vector,允许未初始化的存储。容器的用法,比如vec,大概是这样的:用户明确声明vector应该像这样分配N个未初始化的元素:veca(N,no_init);在数据已知的某个时刻,用户显式地初始化位置n的元素使用参数args...:a.init(n,args...);或者,等效地,手动构造元素:new(&a[n])T(args...);其他操作可能会进行更大规模的初始化或复制(如std::uninitialized_copy),但这只是为了方便;基本的底层操作是相同的。完成一些任务后,vector可能会留下一些已初始化的元素,

C++ 装饰器添加到 std::vector

我有一个记录的基类,想使用装饰器添加额外的字段和比较函数,并能够链接装饰器(记录可以有电子邮件,或出生日期,或两者都有,或没有).我也会有很多这样的装饰器;每个附加字段一个,及其比较功能。完成此操作后,我将使用基类指针将对象添加到vector中。代码如下:classBaseRecord{public:virtualboolCompare();//definedelsewhereprotected:std::stringm_strName;std::stringm_strAddress:};classBaseDecorator:publicBaseRecord{public:BaseDe

c++ - 禁用特定语言功能的自动完成

我使用std导入vector#includeusingstd::vector;我专门这样做,这样我就不必为vector命名空间来提高可读性。所以Sublime中的C++包自动完成为是非常烦人的std::vectorv;不仅仅是vector如何在不禁用所有自动完成或失去C++语言支持的情况下禁用它? 最佳答案 由于您使用的是SublimeText2,因此非常简单。单击Preferences->BrowsePackages...以在操作系统的文件资源管理器中打开Packages文件夹。转到C++目录,删除名为std-vector-(v)