草庐IT

vector_tostr

全部标签

c++ - 将 C++ vector 作为成员放入使用内存池的类中

我一直在编写一个多线程DLL,用于使用ADO/ODBC进行数据库访问,以便与遗留应用程序一起使用。我需要为每个线程保留多个数据库连接,因此我将每个连接的ADO对象放在一个对象中,并考虑将它们的数组保留在自定义threadInfo对象中。显然,vector在这里会更好——我需要在旅途中删除/重新排列对象,而vector会简化这一点。问题是,我正在为每个线程分配一个堆以避免堆争用和其他东西,并从那里分配我所有的内存。所以我的问题是:如何从特定于线程的堆中分配vector?(或者它会在内部知道从与其包装类相同的堆分配内存-听起来不太可能,但我不是C++人)我在谷歌上搜索了一下,看起来我可能需

c++ - C/C++ vector 到 Numpy 数组的快速转换

我正在使用SWIG将一些C++代码粘合到Python(2.6)中,该粘合的一部分包括一段代码,可将大数据字段(数百万个值)从C++端转换为Numpy数组。我能想出的最好方法是为该类实现一个迭代器,然后提供一个Python方法:def__array__(self,dtype=float):returnnp.fromiter(self,dtype,self.size())问题是每个迭代器next调用的成本非常高,因为它必须经过大约三到四个SWIG包装器。这需要太长时间。我可以保证C++数据是连续存储的(因为它们存在于std::vector中),感觉Numpy应该能够将指针指向该数据的开头以

c++ - 将多维数组复制到 vector ,反之亦然

intdArray[1600][32];vector>dVector;n=1600;k=32dVector.resize(n);for(inti=0;i如何使用std::copy(或任何其他函数)将多维数组复制到vector,反之亦然? 最佳答案 你不能直接做,但有一个中间步骤。根据您的要求,像这样的vector_wrapper可能适合您#includetemplatestructvector_wrapper{vector_wrapper(T(&a)[N]){std::copy(a,a+N,std::back_inserter(v)

c++ - vector<bool> 如何处理引用和迭代器?

我们可能都知道C++98vector特化将boolean值存储为位而不是boolean变量。vector的元素不可寻址,因为C++没有指针和对位的引用,是否有解决此问题的方法,任何明显的陷阱(我似乎没有注意到)并且它是否实用甚至尝试这样做? 最佳答案 vector的元素与任何其他元素一样可寻址vector的元素,例如与operator[].但是,由于内存压缩,操作会变慢。也许更快的实现将使用您自己的内存实现并使用二进制移位来处理特定的boolean值。另一种方法是在适当的地方使用简单数组。请记住,您可以使用new动态分配它运营商。编

c++ - 索引集(用于在 vector 中有效删除)

我正要实现我自己的类以有效地从数组中删除,但我想我会问一下是否已经存在类似的东西。我想要的是类似列表的访问效率,但使用数组。出于缓存一致性的原因,我想使用一个数组,因此我不必不断地调用内存分配器(就像在分配节点时使用std::list一样)。我想做的是创建一个包含两个数组的类。第一个是一组元素,第二个数组是一组整数,其中每个整数都是第一个数组中的一个空闲槽。因此,我可以相当轻松地从数组中添加/删除元素,而无需为它们分配新内存,只需从空闲列表中获取索引并将其用于新元素即可。这样的东西已经存在了吗?如果我自己做,我还必须制作自己的迭代器,这样您就可以迭代集合,避免数组中出现任何空槽,我不太

c++ - 如何修剪 vector 字符数组或字符串?

我正在按照这段代码进行修剪std::stringtcp_read(intlisten_at_port=8001){usingnamespacestd;usingnamespaceboost::algorithm;std::vectorreceived_data(512);tcp_read(received_data,listen_at_port);stringstr1(received_data.begin(),received_data.end());trim_right(str1);returnstr1;}我单步执行了代码,我的received_data通常是="add8002(这

c++ - 为什么 std::vector<bool> 更快?

当我实现埃拉托色尼筛法时,我遇到了一个问题std::vector:无法访问原始数据。所以我决定使用自定义的简约实现,这样我就可以访问数据指针。#ifndefLIB_BITS_T_H#defineLIB_BITS_T_H#includetemplateclassbits_t{public:typedefBblock_t;staticconstsize_tblock_size=sizeof(block_t)*8;block_t*data;size_tsize;size_tblocks;classbit_ref{public:block_t*constblock;constblock_tma

c++ - 使用不同类型的元素构造 vector 拷贝时如何显式转换?

我正在复制vectorv的q,但元素类型不同且可隐式转换:vectorv={1,2,3,2};vectorq(v.begin(),v.end());此代码使用有关类型转换的模板barf(警告)进行编译。使转换明确并避免警告的方法是什么?编辑我正在使用警告级别为3(/W3)的VisualStudio2013。这是警告消息的顶部:警告C4244:“正在初始化”:从“int”到“float”的转换,可能会丢失数据...... 最佳答案 C++草案标准(N3337)对浮点转换有这样的说法。4.9Floating-integralconver

c++ - 一次将文件读入 vector

读入std::vector是个好主意,还是这里有一些问题:usingnamespacestd;ifstreamfile("blah.dat",ios::binary);vectorv(N);file.read(static_cast(v.data()),N*sizeof(T));vector标准是否允许我这样做来填充vector?为了简单起见,让我们假设T是一种普通旧数据类型。 最佳答案 如果T,这里没有未定义的行为是平凡可复制的,PODs肯定是。vector::data保证返回指向vector::size的连续数组的指针Ts,以及

C++ vector 按值 : did I get it right? 传递

假设我有一个这样的结构:structtypeA{longfirst;stringseconddoublethird;};如果我声明typeAmyArray[100];然后myArray存储在堆栈中,消耗sizeof(typeA)*100字节的垃圾数据(至少在我存储一些实际数据之前)。每当我将这个数组作为参数传递时,我总是传递一个指向堆栈中第一个元素的指针。所以指针从一个栈到另一个栈。但是如果我声明vectormyVector(4,100);然后myVector对象实际存储在栈中,它包含一个指针,指向存储在堆中的一个4*sizeof(int)字节的数组的第一个元素,这里是实际存储数据的地