草庐IT

STD_LOGIC_VECTOR

全部标签

vector 中某些元素的 C++ 迭代器

如果这是一个微不足道的问题,请原谅我,我只是在学习C++并尝试围绕某些概念进行思考。尤其是涉及到迭代器时,我完全迷路了。假设我有一个表示某种数据结构的自定义类,它的成员之一是一个整数vector。我想为该类编写一个双向迭代器,它只输出vector中的偶数。有没有一种简单而有指导意义的方法?我不想使用STL以外的库。 最佳答案 不确定制作自己的迭代器是否容易。但可能最好的方法是使用有条件的for_each函数。std::for_each对每个元素进行操作。创建一个对某些特定元素执行操作的for_each_if非常容易。例如,下面的程序

c++ - std::wstring 在 Windows 上是否支持 UTF-16 和 UTF-32?

我正在学习Unicode,有几个问题希望得到解答。1)我读过,在Linux上,std::wstring是4个字节,而在Windows上,它是2个字节。这是否意味着Linux内部支持是UTF-32而Windows是UTF-16?2)std::wstring的使用是否与std::string接口(interface)非常相似?3)VC++是否支持使用4字节的std::wstring?4)如果使用std::wstring,是否必须更改编译器选项?作为旁注,我遇到了一个用于使用UTF-8的字符串库,它具有与std::string非常相似的接口(interface),它提供了熟悉的功能,例如长度

C++ - shared_ptr<vector<T>> 与 vector<shared_ptr<T>>

我看到很多人使用vector>的案例.您何时以及为何使用shared_ptr>反而?对我来说,后者似乎在性能和内存使用方面都更有效率。在整个应用程序中共享单个对象vector是否错误?谢谢 最佳答案 此用途:vector>将允许您传递T类型的实例从这个vector到代码的其他部分,不用担心它们不会被释放。即使您的vector将不再存在。shared_ptr>另一方面只保护vector,其元素类型为T没有针对内存泄漏的保护。我在这里假设T是指针类型,如果T是非指针,那么你当然不会在这里造成内存泄漏的问题。好吧,有人可以制作T=shar

python - 使用 SWIG 和 Python/C API 包装返回 std::map 的函数

我想包装一个返回std::map的C++例程整数和指向C++类实例的指针。我无法让它与SWIG一起使用,如果能提供任何帮助,我将不胜感激。我试图通过一个简单的例子将这个问题归结为它的本质。headertest.h定义如下:/*Filetest.h*/#include#include#includeclassTest{private:staticintn;intid;public:Test();voidprintId();};std::mapget_tests(intnum_tests);实现在test.cpp中定义下面:/*Filetest.cpp*/#include"test.h"s

c++ - 嵌套模板类中的 std::conditional

我正在尝试以STL的样式实现RingBuffer。这意味着我还为其实现了一个迭代器,它必须作为const或非const工作。这只是迭代器部分:#include#includetemplateclassRingBuffer{public:classIterator;//actualRingBufferimplementationhere};templateclassRingBuffer::Iterator{public:typedefstd::ptrdiff_tdifference_type;typedefTvalue_type;typedeftypenamestd::condition

c++ - 带有整数参数的 std::pow,与整数类型进行比较

根据http://en.cppreference.com/w/cpp/numeric/math/pow,当std::pow与整数参数一起使用时,结果被提升为double。我的问题如下:将整数类型与std::pow(int1,int2)的结果进行比较有多安全?例如,下面的if可以计算为true吗?std::size_tn=1024;if(n!=std::pow(2,10))cout也就是说,rhs上的结果是否可能类似于1023.99...9,所以当转换为size_t时变成1023?我的猜测是,答案是一个大大的“否”,但想确定一下。我在检查矩阵等的维数时使用这些类型的比较,我不想在任何地方

c++如何在结构 vector 的一个字段上创建迭代器

我有一个所有原始类型的结构,如下所示:structrecord{intfield1;doublefield2;}我有一个该结构实例的vector,如下所示:vectorrecords;是否有可能/创建vector::iterator的最佳方法是什么?这将遍历field1?如果我使用数组recordrecords[n]会怎么样?我需要看起来像vector::iterator的东西.编辑:我需要一个vector::iterator的东西. 最佳答案 制作迭代器适配器首先,最简单的解决方案是迭代容器并从迭代器访问字段。for(auto&&

c++ - std::async "store"如何成为任意异常?

我无法理解std::async怎么可能存储任何异常,而不仅仅是从std::exception派生的东西。我玩弄了下面的代码#include#include#includevoidf(){std::coutfut=std::async(std::launch::async,f);std::cout我异步启动f(),然后在f中抛出一个int。神奇的是,这个int被std::async返回的future捕获并存储。我知道可以在std::async中catch(...)异常,但后者如何在不知道异常类型的情况下存储它?异常不是从某个基类派生的(在这种情况下,可能可以通过一些Base::clone

c++ - std::begin 如何推导 braced-init-list 的类型?

以下代码失败:templatevoidfunc(T&t){}intmain(){func({1,2,3});}但是对于autoa={1,2,3};它是有效的,因为规则允许auto推导出一个std::initializer_list。std::begin如何编写以允许std::begin({1,2,3})工作? 最佳答案 std::begin({1,2,3})有效是因为std::begin有一个overloadtakinganstd::initializer_list. 关于c++-std

c++ - 如何改进 std::vector 参数传递( move 语义?)

我似乎无法完全理解move语义:我想从外部函数填充std::vector(类的成员)。目前,我有类似的东西:voidfillVector(MyClass&myclass){std::vectorvec;/*Fillingvec*///...myclass.setVector(vec);}classMyClass{public:setVector(conststd::vector&v){v_=v;}private:std::vectorv_;};intmain(){MyClassmyclass;fillVector(myclass);/*Usemyclass.v_somehow*/.}我