草庐IT

vector_double

全部标签

c++ - 将大 vector 存储在堆栈中是个坏主意吗?

我一直在研究一堆图像处理程序..没什么特别的,主要是快速而肮脏的实验。图像数据存储在堆栈上声明的vector中(当我不需要传递数据时,我尽量避免使用指针)。我注意到尽管进行了无数次调试和单步执行,但我的某些函数的行为一直很奇怪。有时调试器会给我一个错误,它无法评估某个变量等等。事情通常是没有意义的,过去的经验告诉我,当这种情况发生时,这意味着发生了某种溢出或内存损坏。第一个想到的是,这可能是因为我将大量图像数据存储到vector中。但是,我的印象是vector将它们的实际数据存储在堆中,因此我认为在堆栈中放置一些这样的大vector不会有什么坏处。我这样想错了吗?我应该分配我的vect

c++ - 我应该通过迭代器还是通过访问运算符来迭代 vector ?

我有一个vector声明为std::vectorMyVector;MyVector.push_back(5);MyVector.push_back(6);MyVector.push_back(7);我应该如何在for循环中使用它?通过迭代器对其进行迭代?for(std::vector::iteratorit=MyVector.begin();it!=MyVector.end();++it){std::cout还是通过它的访问迭代器?for(std::vector::size_typei=0;i在我在互联网上找到的示例中,它们都被使用了。它们中的一个是否在所有条件下都优于另一个?如果不是

C++ vector 内存不足

我有一个非常大的vector(数百万个条目,每个条目1024字节)。我超出了vector的最大大小(出现错误的内存分配异常)。我正在对需要访问vector中其他元素的项目vector进行递归操作。操作需要快速完成。出于速度原因,我试图避免写入磁盘。有没有其他方法可以存储不需要写入磁盘的数据?如果我必须将数据写入磁盘,最理想的方法是什么>编辑更多细节。我对数据集执行的操作是根据vector中的其他数据点递归地生成一个字符串。数据读入时排序。数据集范围从50,000到50,000,0000。 最佳答案 解决这个问题最简单的方法是使用ST

c++ - 解析为多个 vector 成员

我想递归地解析一个字符串并将结果存储在一个结构中。我已经编写了一个可以处理一次迭代的解析器。输入格式如下:v1.52.02.5v3.03.54.0f123f456v4.55.05.5v6.06.57.0f789f101112问题是它只解析前4行,它在遇到第三个“v”时停止。完整代码如下。我如何修改此代码,以便它也将输入的其余部分解析为同一结构?我尝试将开始规则从start=vertex>>elements修改为start=*(vertex>>elements),但这只会产生巨大的编译错误。start=+(vertex>>elements)也是如此。我应该如何修改规则有什么想法吗?#in

c++ - 让 std::complex<double> 通过 std::is_floating_point 测试

我想要类型double,float,complex和complex通过static_assert健康)状况。我想static_assert(std::is_floating::value,"somemessage")可以解决问题,但是复杂类型没有通过这个测试(至少在gcc-4.10下是这样)。我应该添加什么谓词来确保这四种类型(可能还有longdoubles)被允许作为模板实例化,但没有别的? 最佳答案 为标准库类型特征类添加特化通常是非法的,即使是用户定义的类型也是如此。§20.10.2[meta.type.synop]/p1:T

c++ - std::vector 本身的地址稳定吗?

如果我获取std::vector的地址,并且它在插入元素后重新分配,我可以假设它的地址没有改变吗?谢谢。 最佳答案 是的,在C++中你可以安全地假设。但是,第一个元素的地址&x[0]可以改变,那些地址是不一样的。编辑:当然其他元素的地址也是一样。顺便说一下,第一个元素的地址是否可能保持或多或少的稳定取决于whetherornotthegrowthfactorofthearrayislessthanthegoldenratio。,这是了解IMO的一个非常酷的事实。 关于c++-std::v

c++ - 如何将 double 转换为标准的 'long double'

如何按照C++标准将double转换为longdouble。我认为像这样转换不是正确的方法吗?doublevalue=1.2;longdoublenewValue=(longdouble)value; 最佳答案 这会很好地工作,但它不会神奇地在newValue中创建额外的精度。也就是说,它不会产生与以下相同的结果:longdoublenewValue=1.2L;这会将newValue设置为更接近1.2。 关于c++-如何将double转换为标准的'longdouble',我们在Stack

c++ - 无法使用 MPI_Send 和 MPI_Recv 发送 std::vector

我正在尝试使用MPI发送和接收函数发送std:vector但我没有到达任何地方。我收到类似的错误FatalerrorinMPI_Recv:Invalidbufferpointer,errorstack:MPI_Recv(186):MPI_Recv(buf=(nil),count=2,MPI_INT,src=0,tag=0,MPI_COMM_WORLD,status=0x7fff9e5e0c80)failedMPI_Recv(124):Nullbufferpointer我尝试了多种组合A)就像用来发送数组的..std::vectorm_image_data2;//definitionof

c++ - 如何使用算法来填充 vector 的 vector

我有typedefstd::vectorIVec;typedefstd::vectorIMat;我想知道如何使用标准算法填充IMat,即如何用更少的代码执行以下操作(所有IVec都有大小相同)?voidfill(IMat&mat){for(inti=0;iPS:已经有一种用常数填充矩阵的方法可以帮助我。最好使用C++11之前的算法。 最佳答案 最佳解决方案是您已经实现的解决方案。它利用i/j作为偏移量和输入来计算算法。标准算法必须为元素和维护计数器使用迭代器。这种数据镜像是问题的明确标志。但它可以完成,如果你想花哨的话,甚至可以在一

c++ - 如何避免 std::vector 在(重新)分配时复制?

我刚刚在向其添加新元素时遇到了std::vector的问题。似乎当你试图向它添加更多元素时,它需要分配更多空间,它通过复制它当前拥有的最后一个元素所有元素来实现。这似乎假设vector中的任何元素都是完全有效的,因此复制总是成功的。在我们的例子中,这不一定是真的。目前我们可能在vector中有一些遗留元素,因为我们选择不删除它们,它们是有效的对象,但它们的数据不能保证有效的行为。对象有守卫,但我从未考虑过向复制构造函数添加守卫,因为我认为我们永远不会复制无效对象(vector强制):CopiedClass::CopiedClass(constCopiedClass&other):mem