草庐IT

ftree-vectorize

全部标签

c++ - 对 vector 中具有常量引用属性的对象进行排序

我需要一些有关C++vector的帮助。我有一个对象,它有两个属性,都是常量引用(这意味着我没有该类的空构造函数)。我需要用其中一些对象创建一个vector,我需要根据其中一个属性的值(特别是otherObj属性,该类重载了所有运算符)对它们进行排序。我遇到了一些麻烦,因为当我尝试对vector执行简单的std::sort时,我认为它会尝试使用空构造函数创建该类的另一个对象来交换这些对象,所以我不这样做不知道该怎么做。我粘贴了一个示例代码,说明我基本上是如何拥有这些对象的(我可能犯了一些错误)classObject{constOtherObject&otherObj;constint&

c++ - 为什么 std::vector::push_back 需要赋值运算符

std::vector::push_back(constT&value)根据this要求类型T是CopyInsertable.但是,除非我提供公共(public)赋值运算符,否则使用失败(clang、GCC、Visual;均没有c++11)编译以下程序。#includeclassA{A&operator=(constA&rhs);//private!!};intmain(){std::vectorv;Aa;v.push_back(a);}为什么我需要提供这个赋值运算符,我的印象是复制构造就足够了。附言我在标准中找不到定义这个的地方,所以如果你能指出引用,我将不胜感激

c++ - 删除 vector 的尾部(通过删除)内存效率高吗?

当做v.erase(some_iterator);实现是否足够智能,可以不进行任何重新分配/字节复制,因为我们可以只更新大小?(与严格删除内部元素不同。) 最佳答案 从std::vector删除不会使第一个删除元素之前的元素的迭代器和引用无效。因此,如果您只删除最后一个元素,则可以保证所有其他元素都保留在原处,不会移动或复制它们。但是,请注意,从std::vector中删除通常只会改变它的大小,而不是它的容量,因此旧对象所在的内存仍然由vector。这是出于性能原因,无需担心(除非您用完RAM)。另外,被删除的对象当然会被适本地销毁

c++ - vector 内存分配策略

我写了一小段代码来确定vector中的内存分配是如何完成的。#include#includeusingnamespacestd;intmain(){vectormyvector;unsignedintcapacity=myvector.capacity();for(unsignedinti=0;i我在Ubuntu上使用VisualStudio2008和g++4.5.2编译了这个并得到了这些结果:VisualStudio:123469131928426394141211316474711106615992398359753958092121381820727310409656144792

c++ - __mm128 的 vector 不会 push_back()

这个简单的SSE代码:#include#includeintmain(){std::vectorblah;blah.push_back(__m128());}在MSVC10上崩溃并在0xffffffff处出现段错误。可能出了什么问题? 最佳答案 std::vector不分配特殊对齐的内存,__m128需要用它来存储它的数据。您将不得不换出分配器,或者将其替换为4个float的数组,然后在每次访问vector时执行未对齐的加载或复制到对齐的位置。 关于c++-__mm128的vector不

c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector

classInterface{};classClass:publicInterface{};classFoo{public:std::vector>&GetInterfaces(){return*(std::vector>*)(&m_data);//returnm_data;}private:std::vector>m_data;};这行得通,但又丑又吓人。有更好/更安全的方法吗?我不想做m_data类型std::vector>因为模块Foo完全属于Class作品的,Interface(和Foo::GetInterfaces())被实现为与一个单独的模块交互,该模块应该只知道Inter

c++ - 如何使用 Visual Studio 在 dll 导出类中使用唯一指针 vector

一个简单的例子class__declspec(dllexport)A{public:vector>v;};VS2013编译错误unique_ptr的已删除复制构造函数.如果我删除__declspec(dllexport),没事。如果我只使用unique_ptrv,也很好。这是编译器错误吗?有什么办法可以解决吗?谢谢。您可以在http://webcompiler.cloudapp.net/上试用完整代码如下#include#include#includeusingnamespacestd;class__declspec(dllexport)A{public:vector>v;};intm

c++ - 在 C++ 中创建 vector 的 shared_ptr

这个问题在这里已经有了答案:Callinginitializer_listconstructorviamake_unique/make_shared(2个答案)关闭6年前。在现代C++中,我们可以像这样初始化一个vector:std::vectorv={1,2,3,4,5};但是如果我尝试创建一个指向vector的智能指针,这将无法编译:autov=std::make_shared>({1,2,3,4,5});有没有比在创建后求助于push_back更好的选择?

c++ - 为什么是非法的: copying vector of pointers into a vector of pointers to constants

问题以下代码无法在C++11(或C++14)中编译。我理解编译器的错误输出,但为什么标准不允许?//main.cpp#includeintmain(void){doublea=3.0;doubleb=3.0;//Itworkswithmerepointersconstdouble*ptrToConst=&a;/***/double*ptrToObj=&a;//ptrToObj=ptrToConst;//Illegal:that'sunderstandable…ptrToConst=ptrToObj;//Works//Butthesamedoesn'tworkwithvectorstop

c++ - std::vector 可以像数组一样对待吗

可以std::vector以这种方式像数组一样对待:std::vectorv(10);strncpy(&v[0],"hello",9);// 最佳答案 是的,没关系。从C++03开始​​,vector需要连续存储。顺便说一句,从C++11开始,std::string也是如此;你可以说v.data()作为&v[0]的同义词(当v为空时也有效)。 关于c++-std::vector可以像数组一样对待吗,我们在StackOverflow上找到一个类似的问题: htt