草庐IT

static_vector

全部标签

c++ - static_cast 一个 void* 指针可以吗

例如提议maphold其中void*总是存储来自classA的指针稍后通过static_cast将其投回是否安全?classA*ptr=static_cast(holditerator->second);原因void*使用是因为hold是在某些不知道什么的cpp文件使用的header上定义的类的成员classA是。我必须包括classA的标题这些cpp文件的定义由于许多原因而无法完成。 最佳答案 是的,static_cast在那种情况下是可以的,并且是正确的使用方式。不过,我不得不问您为什么不首先存储classA*指针。如果你想将派

c++ - 为什么在 std::vector 中使用索引超出范围的运算符 [] 时没有出现异常?

为什么当我使用下面的代码时我没有得到超出范围的异常?std::vectorv;v.resize(12);intt;try{t=v[12];}catch(std::exceptione){std::cout 最佳答案 通过使用operator[],您实际上是在告诉编译器“我知道我在做什么。相信我。”如果您访问数组之外​​的某些元素,那是您的错。你违反了这种信任;你不知道你在做什么。另一种方法是使用at()方法。在这里,您要求编译器对您的访问进行健全性检查。如果它们超出范围,您将获得异常。这种健全性检查可能代价高昂,尤其是在某些深度嵌套

STL - 获取STL vector 中大于某个值的元素的所有位置

我想知道如何找到验证特定条件(例如大于)的元素的索引位置。例如,如果我有一个int值vectorvectorV;V包含值3258211047并且我想获取所有大于5的元素的索引位置。我知道std::find_if但根据文档,它只是找到满足条件的第一个元素。 最佳答案 循环std::find_if,从您上次停止的地方开始。样本(seeitwork):std::vectorresults;autoit=std::find_if(std::begin(v),std::end(v),[](inti){returni>5;});while(it

C++ 将指定的 vector 内容复制到另一个 vector

这个问题在这里已经有了答案:Bestwaytoextractasubvectorfromavector?(16个答案)关闭9年前。我创建了一个vector:std::vectormero;//earlieritfilledwithmorethan500data之后,我想创建另一个vector,它只占用merovector的一部分。(示例:从第100到第250)

c++ - 不允许从 'const char *' 到 'void *' 的 static_cast

在C++中,我试图打印C字符串的地址,但我的转换似乎存在一些问题。我从一本书中复制了代码,但它无法在我的Mac上编译。constchar*constword="hello";cout(word) 最佳答案 你正试图抛弃“常量”:word指向常量数据,但static_cast的结果不是指向常量数据的指针。static_cast不会让你那样做的。你应该使用static_cast相反。 关于c++-不允许从'constchar*'到'void*'的static_cast,我们在StackOve

c++ - 提取 vector 的所有其他元素

有没有更快的方法将std::vector分成两个半大小的std::vectors(一个包含奇数索引的值,另一个包含偶数索引的值)而不是遍历原始vector并比较每个索引是否为index%2==0? 最佳答案 我不确定更好是什么意思,但如果是C++11,你可以使用std::partition_copy:#include#include#include#includeintmain(){std::vectorv1;for(inti=0;iv2;std::vectorv3;booltoggle=false;std::partition_c

C++ static_cast 的正确方法

static_cast不会抛出异常。但是如果不成功,它会产生一个未定义的结果。检查转换是否成功的最正确方法是什么?这会有帮助吗?NewTypenew_typ_obj=static_cast(obj);if(new_typ_obj)new_typ_obj.do(); 最佳答案 static_cast不会为您提供有关成功的信息。如果您需要进行动态类型转换,请使用dynamic_cast或类似boostany的库。 关于C++static_cast的正确方法,我们在StackOverflow上

c++ - 将 QByteArray 转换为 std::vector<unsigned char>

我尝试转换QByteArray至std::vector使用此代码:unsignedchar*buffer=(unsignedchar*)byteArrayBuffer.constData();std::vector::size_typesize=strlen((constchar*)buffer);std::vectorbufferToCompress(buffer,buffer+size);但是,假设byteArrayBuffer是QByteArray充满了数据,我认为它在线上效果不佳unsignedchar*buffer=(unsignedchar*)byteArrayBuffer

C++ - 迭代从 find_if 返回的 std::vector<>

我正在学习C++,所以我觉得这应该是一个非常简单的答案-但我似乎找不到它。所以,如果它是幼稚的,我提前道歉。我有一个std::vector的值,我试图找到奇数值的索引。我正在遵循here中的代码:(在下面重复)://find_ifexample#include//std::cout#include//std::find_if#include//std::vectorboolIsOdd(inti){return((i%2)==1);}intmain(){std::vectormyvector;myvector.push_back(10);myvector.push_back(25);my

c++ - 为什么从指向基的指针到指向派生的指针的 static_cast 是 "invalid?"

所以我有这段代码:Node*SceneGraph::getFirstNodeWithGroupID(constintgroupID){returnstatic_cast(mTree->getNode(groupID));}mTree->getNode(groupID)返回一个PCSNode*。Node公开派生自PCSNode。我在static_cast上找到的所有文档都说明了这一点:“static_cast运算符可用于将指向基类的指针转换为指向派生类的指针等操作。”然而,XCode的(GCC)编译器说从PCSNode*到Node*的static_cast无效且不允许。这是什么原因?当我