草庐IT

static_vector

全部标签

c++ - 有什么理由更喜欢 static_cast 而不是一系列隐式转换?

假设我有一个实现多个接口(interface)的类classCMyClass:publicIInterface1,publicIInterface2{};并且在该类的一个成员函数中,我需要获得一个指向这些接口(interface)之一的void*指针(IUnknown::QueryInterface()中的典型情况。典型的解决方案是使用一个static_cast来实现指针调整:void*pointer=static_cast(this);如果没有从CMyClass继承的已知类,在这种情况下是安全的。但是如果这样的类存在:classCDerivedClass:publicCUnrelat

c++ - 如何使用时间复杂度优于 O(n^2) 的 STL vector 和 STL 算法进行左连接?

我有2个vector,其中包含Person(名字、姓氏等)对象。我想取其中一个vector(我们将其命名为“大”),然后针对该vector中的每个元素在第二个vector(“小”)中找到相应的元素,并将一些数据从“小”vector元素合并到“大”vector元素。此操作与SQL术语中的左连接非常相似,但具有额外的数据合并。最简单的方法是进行2个循环,但这会导致O(n^2)时间复杂度。我可以使用STL算法做得更好吗? 最佳答案 如果你sort小vector,然后您可以通过扫描大vector并使用binary_search获得合并部分的

c++ - 如何仅在实际使用成员模板时才在成员模板中进行 static_assert?

考虑这个简单的类:templateclassFoo{public:Foo(Tconst&val):_val(val){}templateFoo(Fooconst&){static_assert(false,"CannotconvertfromFootoFoo.");}operatorT&(){return_val;}operatorTconst&()const{return_val;}private:T_val;};它允许从模板类型隐式构造并隐式转换回该类型,一个简单的包装器。现在,我不想启用不相关的Foo之间的转换,由于这些隐式构造/转换,这是可能的。我可以将模板化复制构造函数设为私

c++ - 如何在 C 函数中使用 std::vector

C函数期望缓冲区数组在运行时处于范围内。例如charvalues[x][y]C函数将填充缓冲区我想使用动态数组,这样我就不必对尺寸进行硬编码在这种情况下如何使用std::vector?需要说明的是,我使用的是C++。C函数包含在我无法修改的库中。 最佳答案 如果您只想将封装在std::vector中的动态数组传递给c例程,您可以传递一个指向底层数组头部的指针,如下所示:std::vectormyvector;//size-upmyvectorasneededfoo(&myvector[0]);//passapointertostar

c++ - vector 错误,无法使 push_back 工作

这只是未注释的代码片段。打包vector一直在push_back()处导致错误,我不太清楚为什么:编辑:已更新为vector*>>packing=newvector>>();但是,即使调整了模板,仍然存在分配器错误。nomatchingfunctiontocallstd::vector,std::allocator>>::push_back(BinTreeNode>>&BinTree>*Huffman::buildTree(constvector>&tokens){BinTreeNode>*g1=newBinTreeNode>();BinTreeNode>*g2=newBinTreeN

c++ - STL vector 、迭代器和插入 (C++)

我有一个向其传递vector迭代器的方法。在这种方法中,我想将一些元素添加到vector中,但我不确定在只有迭代器时这是否可行voidGUIComponentText::AddAttributes(vector::iteratorbegin,vector::iteratorend){for(vector::iteratori=begin;i!=end;++i){GUIComponentAttribute&attrib=*(*i);//HerearetheGUIComponentAttributeobjectsanalyzed-ifanobjectofa//specialkindappe

c++ - 将 std::vector<T> move 到 T*

全部我有一个遗留代码,在草稿中做这样的事情://sadlyIhavetousethisstructurestructLegacyStruct{int*values;}LegacyStruct*LgStr;....std::vectorvec;//fillvectorinsomewayheresize_tsz=vec.size();LgStr->values=newint[sz];std::copy(vec.begin(),vec.end(),&LgStr->values[0]);vec可能很大,我需要避免将它复制到int*。有办法吗?我试过以下://typeofnewoperatore

c++ - C 和 C++ 中的 Const、static、extern 及其组合

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。1)static、extern和const有何不同,它们在C和C++中的使用有何不同?(默认联动等差异)2)C中使用的头文件中允许以下声明和定义,然后包含在多个文件中。staticinttestvar=233;externintone;externintshow();intabc;constintxyz;//constintxyz=123;produceserrorconstdefinition

C++、 vector 、指针和对象混淆

我正在做一个项目,作为我大学系统编程类(class)的家庭作业。我对指针、vector、堆栈和堆的问题感到非常困惑。使用C++。我必须得到一个对象vector,这些对象是类(class),而这些类(class)对象有几个不同的领域。我所做的是:vectorcoursevector;然后我创建了我的类(class)对象类,其中包含类(class)中剩余的空间和类(class)字段的名称。现在我想添加一个新类(class),我这样做:CoursesObject*theCourse=newCoursesObject(name,space);现在我想将它添加到处理程序vector中:cours

c++ - 如何在 vector 中找到第一个小于整数 X 的元素? (c++)

如果我有以下vector{1010102020203030}我想要一个函数返回=X的整数的位置或直接返回X之后的较小元素,例如如果我正在搜索11我希望函数返回2因为第二个元素(10)是第一个较小的vector中的元素大于11。我尝试使用lower_bound,但这不起作用。intmyints[]={10,20,30,30,20,10,10,20};vectorv(myints,myints+8);//1020303020101020vector::iteratorlow,up;sort(v.begin(),v.end());//1010102020203030low=lower_bou