草庐IT

vectorization

全部标签

c++ - 如何将数据从 `boost::scoped_array`复制到 `std::vector`

vectorvec;boost::scoped_arrayscpaInts;scpaInts.reset(newint[10]);for(inti=0;imethodonevec.assign(scpaInts.get(),scpaInts.get()+10);//=>methodtwo问题一>我想出了两种方法。但我不确定它们是否正确,或者是否有更好的方法来做到这一点。问题2>boost::scoped_array不能获取有效长度是真的吗?谢谢 最佳答案 问题一:两种方法都可以。指向数组元素的指针可以起到随机访问迭代器的作用。这个也

c++ - 对持有 unique_ptr vector 的对象列表进行排序

根据C++11,以下代码是否会产生编译错误(如果是,为什么?)还是VC11的问题?#include#include#includestructA{std::vector>v;};intmain(){std::listl;l.sort([](constA&a1,constA&a2){returntrue;});}VisualC++2012产生以下编译错误:1>c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\xmemory0(606):errorC2248:'std::unique_ptr::unique_ptr':can

c++ - 为什么按显式不可移动和隐式不可复制类型的值返回 vector 不会产生编译错误?

我有这个简单的示例holder类,它是明确不可移动的:templatestructholder{holder()=default;holder(constholder&b):t(b.t){}holder(holder&&b)=delete;holder&operator=(constholder&b){t=b.t;return*this;}holder&operator=(holder&&b)=delete;Tt;};因此,以下类型也是隐式不可复制的(因为std::unique_ptr是这样的):typedefholder>ptr;所以,如果我有像ptrfoo();这样的函数,我会期望

c++ - 在基于范围的 for 循环中使用 shared_ptr 到 std::vector

我编写了一个c++函数,它组装一些数据,然后将std::shared_ptr返回到新分配的包含数据的std::vector。类似于此的内容:std::shared_ptr>shared_ptr_to_std_vector_of_ints(){autov=std::make_shared>();for(inti=0;ipush_back(i);returnv;}我尝试使用基于范围的for循环遍历vector的内容,但它表现得好像vector是空的。在摆弄之后,我发现我可以通过将从函数返回的值分配给局部变量,然后在循环中引用它来让它按照我的预期运行://Executesloopzeroti

c++ - 将相同共享指针的拷贝存储在不同的 vector 中是一种好习惯吗?

我有一个基类BaseObject和两个派生类DerivedObject1和DerivedObject2。它们共享共同的行为和方法,但DerivedObject1有一个额外的方法。我的主类MyClass存储(在std::vector中)这些类实例的boost::shared_ptr。MyClass需要为所有的BaseObject调用commonMethod(),有时需要为所有的DerivedObject1调用additionalMethod()。classBaseObject{virtualvoidcommonMethod();}ClassDerivedObject1:publicBas

c++ - 删除元素后,(c++) vector 会缩小吗?

vector每次在添加元素时用完空间时都会将其大小加倍,但是当您删除元素时呢?假设您向一个数组中添加了800个元素,并且在添加第800个元素时,vector的大小会翻倍,从而能够容纳1600个元素。现在,如果您开始移除元素,以至于它只包含5或10个元素,那会怎样?它会不会认识到vector比为future元素预留的空间大小的一半小得多,预留更少的空间? 最佳答案 vector在删除元素时容量不会减少!这是为了让future的元素能够有效地添加到现有缓冲区中。 关于c++-删除元素后,(c

c++ - 为什么要指向数组或 vector 中最后一个元素之后的内存位置?

假设我们有一个名为data的数组,大小为5。如果我们将此数组作为参数传递给std::end函数,如int*ptr=std::end(data);它将返回一个指针,指向数组中最后一个元素之后的内存位置。问题让指针指向数组中最后一个元素之后的内存位置有什么意义?为什么不直接指向数组中的最后一个元素? 最佳答案 能够从其中包含元素的容器/序列中分辨出“空”容器/序列。如果容器为空,则指向其第一个元素的指针将指向末尾,与“结束”位置相同。ANULL也可以使用指针,但由于迭代器必然是指针,因此NULL不适用。也可以使用迭代器的默认值。在泛型编

c++ - 编译器如何区分 "vector::insert"的两个变体?

我正在实现一个简单的std::vector。有两个insert函数:templatetypenameVector::iteratorVector::insert(const_iteratorpos,size_typecount,constT&value){checkIterator(pos);autop=const_cast(pos);if(count==0){returnp;}for(size_typei=0;itemplatetypenameVector::iteratorVector::insert(const_iteratorpos,InputItfirst,InputItla

c++ - 从 std::vector 中过滤掉元素的有效方法

为了从std::vector中过滤掉一些坏元素,我最终使用了以下代码:#include#include#includetypedefstructmystruct{intid;std::stringname;};intmain(){std::vectorall_items={{151,"test1"},{154,"test4"},{152,"test2"},{151,"test1"},{151,"test1"},{153,"test3"}};std::vectorbad_ids={151,152};std::vectorfilter_items;for(constauto&item:al

c++ - vector 和原始 C 风格数组之间的性能比较

我分析了C++vector和C风格数组之间的性能。结果有点出乎意料,因为文献说vector的性能应该非常接近原始数组,但事实并非如此。我在分析中做错了什么吗?voidgetVector1(intn){if(nivec(n);inti=0;for(auto&x:ivec){x=++i;}autotp2=std::chrono::steady_clock::now();std::chrono::durationdd=tp2-tp1;printf("spend%6.2fustimetocreate:%delementsvectorinside%s()at%s:%d\n",dd.count()