草庐IT

vector_X

全部标签

c++ - 使用 memcpy 将 vector<double> 的内容复制到内存缓冲区

我有一个包装vector的类:templateclassPersistentVector{private:std::vectorvalues;public:std::vector&getValues()throw(){returnvalues;}....}实例是:PersistentVectormoments;我正在尝试将所有double复制到其他人分配的缓冲区中。这是我创建缓冲区的地方://invariant:numMoments=1double*data_x=newdouble[numMoments];这是我尝试将vector的内容复制到缓冲区中:doubletheMoment=m

c++ - 使用字符串文字初始化 vector<char>

以下代码的正确行为是什么?#include#includeintmain(){std::vectorv={"y","z"};std::cout这被Clang接受了但不是GCC和VC++这不是未定义的行为吗? 最佳答案 在深入研究标准之后,我发现了以下内容:在这里,我正在尝试初始化vector使用两个字符串文字,而不是两个字符。使用vector(initializer_list).在这种情况下,vector(initializer_list).但是字符串文字的类型是“nconstchar数组”,因此初始化列表构造函数不匹配。这不会导致

c++ - 如何在 C++11 中返回类成员 vector

我读了几篇关于如何从方法返回vector的文章,包括这些:c11rvaluesandmovesemanticsconfusionreturnstatementwantspeedpassbyvaluewhydoesvisualstudionotperformreturnvalueoptimizationrvoWiki-ReturnValueOptimization我仍然对如何在VS2013中以正确的方式传递vector以及此代码中以下方法之间的区别感到困惑(问题在注释中标记):classFoo{private:std::vectorvect;public://1-classicway?v

c++ - 在抽象接口(interface)中不转移所有权的指针 vector 的常量正确访问器

我正在从头开始设计一个库,并希望获得尽可能良好的公共(public)API。我希望编译器因滥用而对我大喊大叫。因此,我给自己制定了以下规则:整个库的真实(即深入和完整)const正确性所有东西(局部变量、成员变量、成员函数),预计不会改变的都被声明为const.该常量性应传播到所有嵌套成员和类型。明确和表达所有权根据C++核心指南,我将其定义为(iff在当且仅当的数学意义上):函数参数是unique_ptr或T&&iff函数正在使用它(即取得所有权)函数参数是shared_ptr或Tconst&iff函数只读取它函数参数是shared_ptr或T&iff函数正在修改它而不取得所有权返回

c++ - 迭代多个 std::vector

我在这里和其他地方读到,当使用索引迭代std::vector时,你应该:std::vectorx(20,1);for(std::vector::size_typei=0;i但是如果您要迭代两个不同类型的vector会怎样:std::vectorx(20,1);std::vectory(20,1.0);for(std::vector::size_typei=0;i假设安全吗std::vector::size_type与属于同一类型std::vector::size_type?仅使用std::size_t是否安全?? 最佳答案 是的,对

c++ - 多个线程可以在不同的地方访问一个 vector 吗?

假设我有一个intvector,我预先填充了100个值为0的元素。然后我创建2个线程并告诉第一个线程用数字填充元素0到49,然后告诉线程2用数字填充元素50到99。这可以做到吗?否则,实现此目标的最佳方法是什么?谢谢 最佳答案 是的,这应该没问题。只要能保证不同线程不会修改同一个内存位置,就没有问题。 关于c++-多个线程可以在不同的地方访问一个vector吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

c++ - 为什么 valarray 没有像 C++03 中的 vector 那样的交换函数?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。如标题,我对此感到困惑。如果我们面临迭代问题,swap应该非常有用。可以通过交换指向内存的指针而不是内容来交换旧vector和新vector。但是,这在std::vector中有效,但在std::valarray中无效。我想知道为什么。C++0x好像加了这个函数,为什么C++03没有?

c++ - 为什么 std::vector 在初始化时强制执行复制?

我有一个复制/move探测类:#includestructA{A(){std::cout我发现运行:#includeintmain(int,char**){std::vectorv{A()};}产生以下输出:CreatingACopyingADeletingADeletingA为什么初始化不只是move对象?我知道std::vector可能会创建undesiredcopiesonresize,但如您所见,添加noexcept在这里没有帮助(此外,我认为调整大小导致拷贝的原因不适用于初始化)。如果我改为执行以下操作:std::vectorv;v.push_back(A());我没有得到拷

c++ - 在 vector 中使用具有 const 数据成员的类

给定这样一个类:classFoo{constinta;};是否可以将该类放入vector中?当我尝试时,我的编译器告诉我它不能使用默认赋值运算符。我尝试自己编写,但谷歌搜索告诉我不可能为具有const数据成员的类编写赋值运算符。我发现的一篇帖子说“如果你将[数据成员]设置为const,这意味着你不希望首先发生赋值。”这是有道理的。我已经编写了一个包含const数据成员的类,但我从未打算对其使用赋值,但显然我需要赋值才能将其放入vector中。有没有办法解决这个问题仍然保持常量正确性? 最佳答案 I'vewrittenaclasswi

c++ - 这是在 C++11 中将一个 std::vector 的内容移动到另一个的末尾的最有效方法吗?

我在想vector::insert()和std::copy()命令需要额外的分配。但是,如果我push_back()一个新创建的元素然后swap()它我认为这会减少任何分配,只要包含的类型没有分配默认值构造函数。我的问题实际上专门针对std::string类型的std::vector,但应该适用于此处所述的其他包含类型:templatevoidappendMove(std::vector&dst,std::vector&src){dst.reserve(dst.size()+src.size())for(std::vector::iteratorit=src.begin();it!=s