草庐IT

vector_tostr

全部标签

c++ - 编写 std::vector 与普通数组的线程安全

我已阅读onStackoverflow没有一个STL容器对于编写来说是线程安全的。但这在实践中意味着什么?这是否意味着我应该将可写数据存储在普通数组中?我预计对std::vector::push_back(element)的并发调用可能会导致数据结构不一致,因为它可能需要调整vector的大小。但是像这种不涉及调整大小的情况呢:使用数组:intdata[n];//initializevalueshere...#pragmaompparallelforfor(inti=0;i使用`std::vector`:std::vectordata;data.resize(n);//initiali

c++ - 为什么 std::accumulate 函数显示 vector <double> 的错误总和?

考虑以下代码来添加vector的所有元素:#include#include#include#includeusingnamespacestd;intmain(void){std::vectorV;V.push_back(1.2);V.push_back(3.6);V.push_back(5.6);doublesum=accumulate(V.begin(),V.end(),0);cout当我在Windows上的Cygwin上编译并运行它时,我在终端得到的输出为ThesumoftheelementsofthevectorVis9accumulate函数似乎将所有数字四舍五入并将它们相加,

c++ - vector 不是模板?

我目前正在尝试学习为自上而下的RPG制作简单的2D平铺引擎的教程。出于某种原因,虽然我得到了智能感知错误vector不是模板“vector”一词带有红色下划线。为什么这不起作用?为什么它告诉我它是一个模板,为什么意味着程序无法运行?#ifndef_IMAGEMANAGER_H#define_IMAGEMANAGER_H#include#includeclassImageManager{private:vectortextureList;public:ImageManager();~ImageManager();voidAddTexture(sf::Texture&texture);sf

c++ - 为什么编译超过100,000行的std::vector::push_back需要很长时间?

我正在编译一个C++库,该库定义了一个从一组数据点中随机采样的函数。数据点存储在std::vector中。有126,272个std::vectorpush_back语句,其中所涉及的vector的类型为double。编译需要很长时间。为什么要花这么长时间?(除了std::vectorpush_back语句外,所有其他代码的编译时间都将少于1秒,因为其他代码很少。) 最佳答案 gcc中有-ftime-report选项,可打印每个编译器阶段浪费的时间的详细报告。我将ubuntu12.0464位和gcc4.6.3一起使用,此代码可重现您的

c++ - 我应该删除 vector <string> 吗?

在过去的几天里,我痛苦地学习了很多关于C++编程的知识。我喜欢它:)我知道我应该释放内存——黄金“每个malloc=free”或“每个new=delete”规则现在存在于我的世界中,但我将它们用于相当简单的对象。vector呢?只要可以,我都会使用vector.clear()但这显然还不够,因为我有大量的内存泄漏。你能指导我如何处理这个东西吗?*编辑谢谢,您的评论让我想到了这个应用程序的算法,我将能够完全消除vector。:O抱歉-我开始在这里解释我的用例,然后我发现了我真正需要的东西。就像你连续3天每天18小时编写代码一样:|*编辑2这太疯狂了。通过对代码的微小更改,我将内存使用量从

c++ - 如何在 C++ 中为 MPL vector 的所有成员显式实例化模板?

考虑以下头文件://Foo.hclassFoo{public:templatevoidread(T&value);};我想显式实例化Foo::readboost::mpl::vector中包含的所有类型的源文件中的成员函数模板://Foo.cc#include#include#include"Foo.h"templatevoidFoo::read(T&value){/*dosomething*/}typedefboost::mpl::vectortypes;//templateFoo::read(int&);//templateFoo::read(long&);//templateFo

c++ - 静态 vector 内部数据布局 - `union` 与 `std::aligned_storage_t` - 巨大的性能差异

假设您必须实现一个static_vector类,它是一个固定容量容器,完全位于堆栈上并且从不分配,并公开了一个类似于std::vector的接口(interface)。(Boost提供boost::static_vector。)考虑到我们必须为N的最大T实例未初始化存储,在设计内部数据布局时可以做出多种选择:单成员union:unionU{T_x;};std::array_data;单个std::aligned_storage_t:std::aligned_storage_t_data;std::aligned_storage_t数组:usingstorage=std::aligned

c++ - 如何在 gdb 中将 C++ std::vector 的大小设为 "watch"?

我有一个std::vector作为类的一部分,它包含一个自定义类型。它的内容似乎从程序的某个地方神秘地改变了。我无法弄清楚这是在哪里发生的。有没有办法从gdb“观察”std::vector的内容(或大小)?谢谢。 最佳答案 Isthereawayto"watch"thecontents(orsize)ofastd::vectorfromgdb?假设您使用的是GCC,请在theVector->_M_impl._M_start和_M_finish上设置观察点。如果您正在使用其他一些std::vector实现,请进行相应调整。例子:#in

c++ - unique_ptr & vector,试图访问已删除的函数,Visual Studio 2013

我正在尝试使用unique_ptr来管理我的内存,而VS2013似乎在我认为不应该的时候给我带来了麻烦。似乎编译器出于某种原因试图访问已删除的复制构造函数,而它确实没有理由这样做。这是我的一门课的样子:classMesh{public:Mesh(oglplus::Program*program,conststd::vector&vertices,conststd::vector&indices);voiddraw();private:constoglplus::Program*_program;std::vector_vertices;std::vector_indices;oglpl

c++ - 为什么这个 std::vector::emplace_back 失败?

我遇到了一个编译器错误:attemptingtoreferenceadeletedfunction#include#includetemplatestructContainer{Container()=default;Container(constContainer&other)=delete;Container(T*ptr):ptr(ptr){}T*ptr;~Container(){deleteptr;}};structFoo{Foo(inta,intb){}};intmain(){std::vector>myvector;myvector.push_back(newFoo(1,2)