草庐IT

static_vector

全部标签

c++ - 如何一次将多个 unique_ptr 插入 vector

我有一个vector:std::vector>并想插入几个新的unique_ptr在指定位置放入其中。有成员函数std::vector::insert(iteratorposition,size_typen,constvalue_type&val)但唉,复制的限制unique_ptr的不允许使用此重载。我已阅读thisquestion,然而这是为了插入unique_ptr已经存在于另一个vector中。我想创建新的。我意识到我可以用一个循环来做到这一点,例如将3个新项目插入vector的开头:for(intn=0;n!=3;++n)vec.insert(vec.begin(),std:

c++ - std::move into static_pointer_cast:为什么 static_pointer_cast 没有右值引用重载?

假设我们有一个函数需要一个按值共享的指针。(在现实生活中的例子中,我通过右值引用获取它并将其转发给成员。)voidf(std::shared_ptrptr){...}但是我们只有一个指向基类的共享指针,所以我们使用static_pointer_cast:std::shared_ptrptr=std::make_shared();f(std::static_pointer_cast(ptr));第一个赋值(从临时构造ptr)是否触发了引用计数的原子递增和递减,或者共享指针是否被移动?(请注意,它正在向上转换。)在static_pointer_cast中有引用计数的原子增量。如果我们不再需

c++ - 多线程 vector 和的可扩展性

这是一段用于多线程vector求和的C++11代码。#includetemplatevoidsum_partial(ITERa,ITERb,double&result){result=std::accumulate(a,b,0.0);}templatedoublesum(ITERbegin,ITERend,unsignedintnb_threads){size_tlen=std::distance(begin,end);size_tsize=len/nb_threads;std::vectorthr(nb_threads-1);std::vectorr(nb_threads);size

c++ - 从对 vector 中按值删除元素

自C++20起,我们可以通过执行以下操作按值从vector中删除元素:std::vectorv={10,20,30,40,50};std::erase(v,30);这真的很方便,更不用说还有std::erase_if。但是,如果我们有一个对vector并且我们想要删除,只有当对的second值匹配时怎么办?std::pairfoo=std::make_pair(1,"1");std::pairfoo2=std::make_pair(2,"2");std::vector>v;v.push_back(foo);v.push_back(foo2);std::erase(v,make_pair

c++ - 使用无法安装的类的有效 STATIC 成员函数

我有以下代码:在gcc-3.4、gcc-4.3、intel编译器下编译没有问题,在MSVC9下编译失败。MSVC告诉“使用未定义类型c_traits,同时编译类模板成员函数voidfoo::go(void)与C=short。编译器试图安装未使用类的未使用成员函数,因为根本没有使用这个类。我可以通过专门化整个类foo而不是专门化来解决这个问题它的成员函数。但重点是,由于不同的原因,对整个类(class)进行特化对我来说有点问题。大问题:什么是正确的?我的代码是否错误,gcc和intel编译器只是忽略了这个问题,因为它们没有完全安装foo,或者代码正确,这是MSVC9(VC2008)的错误

c++ - 包装 STL vector 并更改其迭代器的行为

有这样的代码:#include#includetemplateclassA{public:classiterator:publicstd::vector::iterator{public:T&operator*(){??}};iteratorbegin(){returnv.begin();//error}iteratorend(){returnv.end();//error}voidadd(constT&elem){v.push_back(elem);}private:std::vectorv;};intmain(){Aa;a.add(2);a.add(4);for(A::iterat

c++ - 二维数组的 concurrent_vector

我目前正在尝试使用tbb::concurrent_vector表示二维数组.这个二维数组将被许多不同的线程访问,这就是为什么我希望它尽可能高效地处理并行访问。我想出了两个解决方案:使用tbb::concurrent_vector>存储它。将所有内容存储在tbb::concurrent_vector中并使用x*width+y访问元素我更喜欢第二个,因为我不想锁定整行来访问一个元素(因为我假设要访问元素array[x][y],tbb实现将锁定x行,然后y个元素)。我想知道哪种解决方案对您来说更好。 最佳答案 首先,我认为关于tbb::c

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ - vector 序列化

我正在尝试对vector数据进行二进制序列化。在下面的这个示例中,我序列化为一个字符串,然后反序列化回一个vector,但没有得到与我开始时相同的数据。为什么会这样?vectorv;v.push_back(1);v.push_back(2);v.push_back(3);strings((char*)(&v[0]),3*sizeof(size_t));vectorw(3);strncpy((char*)(&w[0]),s.c_str(),3*sizeof(size_t));for(size_ti=0;i我希望得到输出123而是获取输出100(在gcc-4.5.1上)

c++ - 内部数组访问比 std::vector 访问快得多——Black Magic?

我已经设置了一个测试程序来比较数组访问性能与std::vector的访问性能。我发现了几个类似的问题,但似乎没有一个能解决我的具体问题。一段时间以来,我一直在摸不着头脑,为什么数组访问似乎比vector访问快6倍,而我在过去读到它们应该是等价的。事实证明,这似乎是英特尔编译器(v12)和优化(发生在-O1以上的任何东西)的函数,因为我看到使用gccv4.1.2时std::vector的性能更好,并且数组有仅gccv4.4.4的2倍优势。我正在具有XeonX5355内核的RHEL5.8机器上运行测试。顺便说一句,我发现迭代器比元素访问更快。我正在使用以下命令进行编译:icpc-fastt