草庐IT

vectorize

全部标签

C++ Vector Template Per-Component 操作

我正在重写项目的vector数学部分,我想根据vector的类型和维数来概括vector。vector表示类型为T的N维vector。templatestructvector{Tdata[N];};我需要重写许多数学函数,其中大部分将在每个组件的基础上运行。加法运算符的直接实现如下所示。templatevectoroperator+(vectorlhs,vectorrhs){vectorresult;for(inti=0;i我的问题:有没有办法(通过模板技巧?)在不使用for的情况下实现它循环和一个临时变量?我知道编译器很可能会展开循环并将其优化掉。我只是不喜欢以这种方式实现所有对性能

c++ - 使用数组 vector 的正确方法

有人能告诉我使用数组vector的正确方法是什么吗?我声明了一个数组vector(vector)但得到了error:conversionfrom'int'tonon-scalartype'float[4]'requested当试图resize它。出了什么问题? 最佳答案 您不能将数组存储在vector或任何其他容器中。要存储在容器中的元素类型(称为容器的值类型)必须是可复制构造和可赋值的。数组两者都不是。但是,您可以使用array类模板,例如Boost、TR1和C++0x提供的类模板:std::vector>(您需要将std::ar

c++ - 一个尾数下标的明显规范不足:对于原始数组和 std::vector。已经果断解决了吗?

它以前曾以各种形式被问过,但由于语言规范在这方面似乎是动态的(或者至少是当一些关于这个问题的SO讨论发生时动态的),它根据任何最新的发展(如果有的话)重新审视这个问题可能是有意义的。因此,问题又是,&和下标的组合是否是获取指向数组的假想尾后元素的指针的有效方法inta[42]={};&a[42];它在C++98中被认为是未定义的。但是现代C++呢?我们已经看到DR#232,但出于某种原因仍处于“起草”状态,并且绝对不在标准文本中(自C++14起)。问题是否仍然悬而未决,还是已通过其他方式解决?有趣的是DR#315似乎公开允许通过空指针调用非静态成员函数p(!)基于“*p在p为空,除非左

c++ - 移动 vector 会使迭代器无效吗?

如果我有一个指向vectora的迭代器,那么我从a移动构造或移动分配vectorb,该迭代器仍然指向相同的元素(现在在vectorb中)?这是我在代码中的意思:#include#includeintmain(intargc,char*argv[]){std::vector::iteratora_iter;std::vectorb;{std::vectora{1,2,3,4,5};a_iter=a.begin()+2;b=std::move(a);}std::couta_iter是否仍然有效,因为a已被移动到b中,或者迭代器是否因移动而无效?作为引用,std::vector::swapd

c++ - vector 增长时如何强制执行 move 语义?

我有一个std::vector对象的某个类A。该类非常重要,并且定义了复制构造函数和move构造函数。std::vectormyvec;如果我用A对象填充vector(使用例如myvec.push_back(a)),vector的大小会增加,使用复制构造函数A(constA&)实例化vector中元素的新拷贝。我能否以某种方式强制开始使用类A的move构造函数? 最佳答案 您需要使用noexcept通知C++(特别是std::vector)您的move构造函数和析构函数不会抛出异常。然后move构造函数将在vector增长时被调用。

c++ - 用于 cv::Mat 参数的 OpenCV std::vector

执行这个:std::vectorpts;//contains4elementscv::MatptsMat=((cv::InputArray)pts).getMat();在一台机器上,我得到一个带有2个channel的4-by-1cv::Mat。每个元素代表一个二维点。在另一台机器上,我得到一个2090-by-1cv::Mat,它有2个channel,数据很奇怪。这是错误的,这是一个问题,因为vector只包含4个项目。在两台机器上都使用OpenCV3.1从源代码构建,在Windows10上使用CMake。编辑我开始在另一台机器上遇到类似的问题。在Debug模式下的VisualStudi

c++ - std::remove_if 和 erase 不从 std::vector 中移除元素

我正在练习leetcodeeasy问题。我想使用lambda从vector中删除_if(这是第一次,太棒了)。我得到一个指向new_end的负指针。#include#include#include#include//std::greaterusingnamespacestd;intmain(){vectora={2,7,11,15};inttarget=9;autonew_end=std::remove_if(a.begin(),a.end(),[&a,target](constintx){returnstd::count(a.begin(),a.end(),x)>target;});

c++ - std::vector 应该尊重 alignof(value_type) 吗?

如果我定义一个具有特定对齐要求的简单类型,该类型的std::vector难道不应该为每个元素遵守对齐吗?考虑下面的例子typedefstd::arrayalignas(32)avx_point;std::vectorx(10);assert(!(std::ptrdiff_t(&(x[0]))&31)&&//assertthatx[0]is32-bytealigned!(std::ptrdiff_t(&(x[1]))&31));//assertthatx[1]is32-bytealigned我发现clang3.2(带或不带-stdlib=libc++)悄悄地(没有任何警告)违反了对齐要求

c++ - vector 结束迭代器

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:comparingiteratorsfromdifferentcontainers在实践中,std::vector::iterator可能被实现为一个包装T*在大多数STL实现中,每个迭代器都与一个唯一的内存地址相关联(假设迭代器来自非空vector)。但是,这是一个实现细节。C++标准是否有任何实际保证,即每个vector迭代器在某种程度上都是唯一的?具体来说,可以end()一个非空vector的迭代器永远等于end()另一个非空vector的迭代器?例如:std::vectorv1;std::vector

c++ - vector动态内存分配之private member vector

我是C++新手(我学过Fortran编程),我想为多维表动态分配内存。该表是私有(private)成员变量:classtheclass{public:voidsetdim(void);private:std::vector>thetable;}我想用函数setdim()设置表格的尺寸。voidtheclass::setdim(void){this->thetable.assign(1000,std::vector(2000));}我编译这个程序没有问题,但是当我执行它时,我遇到了一个段错误。对我来说奇怪的是,这段代码(见下文)完全符合我的要求,只是它没有使用我类的私有(private)