草庐IT

vector_tostr

全部标签

c++ - 如何返回指针 vector (和所有权)C++11

我有一个工厂方法,它创建一堆对象并返回指向它们的指针。对象的所有权转移给调用者:std::vectorcreate_zoo();这可行,但容易出现内存泄漏。autozoo=create_zoo();vector在堆栈上并被自动清理,包含的对象不是。返回各种子类型的对象。返回值而不是指针是不行的。我想用std::vector>create_zoo();但是unique_ptr没有复制语义,我按值返回vector,理论上它会创建一个拷贝。我可以将vector放在堆上以避免这种情况std::unique_ptr>>create_zoo();但这越来越荒谬了。这应该也可以:std::vecto

c++ - 我想要一个派生类指针 vector 作为基类指针

在C++中,vector类存储一个对象数组。在这种情况下,我存储指向派生类对象(Dogs)的指针。在某些时候,我想将此vector视为指向基类(动物)对象的指针。这是“正确”/无争议的方式,对吗?为什么我不能这样做?#includeusingnamespacestd;classAnimal{};classDog:publicAnimal{};intmain(intargc,char*argv[]){vectordogs;dogs.push_back(newDog());dogs.push_back(newDog());vectoranimals=dogs;//Thisdoesn'tse

python - 通过 Cython 将 C++ vector 传递给 Numpy,无需自动复制和处理内存管理

处理大型矩阵(NxM与1K然而,有时我需要在C++中启动和预处理矩阵并将其传递给Numpy(Python3.6)。让我们假设矩阵是线性化的(所以大小是N*M并且它是一维矩阵-col/row主要在这里无关紧要)。按照这里的信息:exposingC-computedarraysinPythonwithoutdatacopies&修改它以实现C++兼容性,我能够传递C++数组。问题是如果我想使用标准vector而不是初始化数组,我会得到段错误。例如,考虑以下文件:fast.h#include#includeusingstd::cout;usingstd::endl;usingstd::vec

c++ - C++11 中的 unique_ptr vector

我最近切换到C++11,并且正在尝试习惯那里的良好实践。我最终经常处理的是这样的:classOwner{private:vector>_vectorOfHeavyResources;public:virtualconstvector*GetVectorOfResources()const;};这需要我做一些事情,比如添加一个_returnableVector并翻译源vector以便以后能够返回它:_returnableVector=vector;for(inti=0;i有没有人注意到类似的问题?你的想法和解决方案是什么?我在这里得到了完整的所有权想法吗?更新:这是另一件事:如果一个类将

c++ - 看到 std::vector<Typo> 和 std::vector<struct Typo> 时发出的编译器诊断之间存在差异的原因是什么

考虑这两个程序及其尝试编译。#includeintmain(){std::vectora;//Errorscenteredaround`Typo`beinganincompletetype}例如,gcc6.3给出了以Typo为不完整类型为中心的错误消息,包括/usr/include/c++/6/bits/stl_vector.h:161:9:error:invaliduseofincompletetype‘structmain()::Typo’#includeintmain(){std::vectorb;//Errorscentredaround`Typo`notbeingdefine

c++ - 将 std::stack 复制到 std::vector

标准是否保证以下代码可以工作(假设st不为空)?#include#includeintmain(){externstd::stack>st;int*end=&st.top()+1;int*begin=end-st.size();std::vectorstack_contents(begin,end);} 最佳答案 是的。std::stack只是一个容器适配器。可以看到.top()其实是(§23.3.5.3.1)referencetop(){returnc.back();}其中c是容器,在本例中是std::vector也就是说你的代码

c++ - 有没有一种简单的方法可以让 `boost::ptr_vector` 在 Visual Studio 中对调试器更加友好?

我正在考虑使用boost::ptr_container作为thisquestion的响应的结果.该库的最大问题是我无法在调试器中查看集合的内容,因为MSVC调试器无法识别它,因此我看不到容器的内容。(所有数据在内部存储为void*)我听说MSVC有一个名为“调试器可视化器”的功能,它允许用户使调试器更智能地处理这些事情,但我从来没有写过这样的东西,而且我不是很熟悉这样的事情。例如,将boost::shared_ptr的行为与MSVC自己的std::tr1::shared_ptr进行比较。在调试器中(即在Watch窗口中),boost版本显示为用于实现共享指针的大量内部变量,但MSVC版

c++ - std::vectors 是否应该广泛用于嵌入式系统?

在为CPU和内存资源有限的嵌入式系统编写C++代码时,常见的经验法则是在堆栈中实例化对象,除非确实需要,否则避免使用堆。这样做当然有很多已知的好处,但是随着STL的出现和人们推荐std::vectors作为一种有效的数据结构,它是否违反了我提到的经验法则,因为vector将使用堆?示例:在过去,人们会声明具有已知大小以满足使用需求的静态数组。如今,人们只会使用vector。我对这种过渡不太满意,因为vector总是有可能无法分配所需的内存(提醒:这是针对内存有限的嵌入式系统)。在堆栈中使用已知大小的数组可以保证在编译时有空间分配。调用reserve()有点帮助,但这是在运行时完成的。那

c++ - 将 Eigen Vector4 类型转换为 Vector3 的最佳方法?

我想将Eigen中Vector4类型的前三个值提取为Vector3类型。到目前为止,我是在for循环中进行的。有更聪明的方法吗? 最佳答案 .head()成员函数返回vector的前n个元素。如果n是一个编译时常量,那么您可以使用模板化变体(如下面的代码示例),Eigen库将自动展开循环。Eigen::Vector4fvec4;//initializevec4Eigen::Vector3fvec3=vec4.head();在Eigen文档中,参见Blockoperations用于介绍提取部分vector和矩阵的类似操作,以及Dens

c++ - 使用 SSE 加速浮点 5x5 矩阵 * vector 乘法

我需要每秒运行240000次矩阵vector乘法。矩阵是5x5并且始终相同,而vector在每次迭代时都会发生变化。数据类型为float。我正在考虑使用一些SSE(或类似)指令。我担心算术运算的数量与所涉及的内存运算的数量相比太少了。您认为我可以得到一些切实的(例如>20%)改进吗?我需要英特尔编译器吗?你能指出一些引用吗? 最佳答案 Eigen用于vector、矩阵等的C++模板库...两者都有针对固定大小的小矩阵(以及动态大小的矩阵)的优化代码使用SSE优化的优化代码所以你应该试一试。