Tag: 向量

如何缩小std :: vector?

有没有办法调整std :: vector来降低容量,当我不再需要以前保留的空间?

Android NDK中不能包含像vector这样的C ++头文件

当我尝试在我的Android NDK项目(使用NDK r5b,最新版本)中包含任何类似vector的C ++类时,出现如下错误… Compile++ thumb : test-libstl <= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory 在网上报道这个问题的其他人已经声称增加了成功 APP_STL := stlport_static 到他们的Application.mk文件。 我已经完成了这个以及APP_STL的其他所有可能的值。 我清理了项目,运行ndk-build clean,删除了obj和libs文件夹,而且当我编译它时,却找不到vector类。 我已经在这里工作了几个星期(因为NDK r5出来了),如果有人有任何build议,我会很感激。 谢谢!

迭代vector,去掉某些项目

我有一个std ::向量m_vPaths; 我将迭代这个向量,并随时调用:: DeleteFile(strPath)。 如果我成功删除了文件,我会从vector中删除它。 我的问题是我可以绕过不得不使用两个向量? 有不同的数据结构可能更适合我需要做的吗? 例如:使用迭代器几乎做我想要的,但问题是一旦你使用迭代器擦除,所有迭代器变得无效。 std::vector<std::string> iter = m_vPaths.begin(); for( ; iter != m_vPaths.end(); iter++) { std::string strPath = *iter; if(::DeleteFile(strPath.c_str())) { m_vPaths.erase(iter); //Now my interators are invalid because I used erase, //but I want to continue deleteing the files remaining in my vector. } } 我可以使用两个向量,我将不再有问题,但有没有更好,更有效的方法来做我想做的事情? 顺便说一句,因为目前还不清楚,m_vPaths是这样宣布(在我的class级): std::vector<std::string> m_vPaths;

如何分辨一个vector而不是另一个vector?

在matlab中,有一种方法可以在一个vector中find值,而在另一个vector中找不到值。 例如: x <- c(1,2,3,4) y <- c(2,3,4) 有什么函数可以告诉我, x中不是y是1吗?

什么是dynamic分配数组的理想增长率?

C ++有std :: vector,Java有ArrayList,许多其他语言都有自己的dynamic分配数组forms。 当dynamic数组空间不足时,会将其重新分配到更大的区域,并将旧值复制到新数组中。 这种arrays的性能问题主要在于arrays的大小有多快。 如果你总是变得足够大,以适应当前的推动,那么你将最终每次重新分配。 因此,将数组大小加倍或将其乘以1.5倍是有意义的。 有一个理想的增长因素吗? 2倍? 1.5倍? 理想的意思是math上合理的,最佳的平衡performance和浪费的记忆。 我意识到理论上,考虑到你的应用程序可能有任何潜在的推送分布,这是有些依赖于应用程序。 但是我很想知道是否有一个“通常”最好的价值,或者在一些严格的约束条件下被认为是最好的。 我听说有这方面的文章,但我一直无法find它。

从vector中提取子vector的最佳方法是什么?

假设我有一个大小为N的std::vector (我们称之为myVec )。 构造由元素X到Y的副本组成的新向量的最简单方法是什么?其中0 <= X <= Y <= N-1? 例如, myVec [100000]通过myVec [100999]中的一个大小为150000的向量。 如果这不能有效地完成一个向量,是否有另一个我应该使用的STL数据types呢?

数组与vector:导言的相似之处和差异

C ++中的数组和vector之间有什么区别? 差异的一个例子可能包括图书馆,象征,能力等等。 排列 数组包含特定types的特定数量的元素。 为了让编译器在编译程序时能够保留所需的空间,必须指定数组在定义时所包含的元素的types和数量。 编译程序编译时,编译器必须能够确定这个值。 一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素。 数组是零索引的; 也就是说,第一个元素位于索引0处。这个索引scheme指示了C ++中指针和数组之间的紧密关系,以及语言为指针算术定义的规则。 – C ++袖珍参考 向量 向量是dynamic大小的对象序列,提供了数组式的operator[]随机访问。 成员函数push_back通过拷贝构造函数复制它的参数,并将该拷贝添加为向量中的最后一项,并将其大小递增1。 通过删除最后一个元素, pop_back完全相反。 插入或删除vector结束的项目需要分摊固定时间,插入或删除任何其他位置需要线性时间。 这些是vector的基础。 他们还有很多。 在大多数情况下,vector应该是您在C风格数组上的首选。 首先,它们是dynamic大小的,这意味着它们可以根据需要增长。 您不必进行各种研究来找出最佳的静态大小,就像C数组的情况一样; 一个向量根据需要增长,如果需要的话可以手动resize。 其次,向量提供了at成员函数(而不是operator[] )上的边界检查,所以如果你引用一个不存在的索引,而不是简单地看你的程序崩溃或更糟糕,继续执行损坏的数据,你可以做一些事情。 – C ++食谱

如何总结一个C ++向量的元素?

寻找std::vector中所有元素总和的好方法是什么? 假设我有一个有几个元素的向量std::vector<int> vector 。 现在我想find所有元素的总和。 同样的方法有什么不同?

寻找类似C ++ STL的vector类,但是使用栈存储

在我写我自己之前,我会问你们所有人。 我正在寻找一个几乎完全像STL向量的C ++类,但将数据存储到堆栈中的一个数组中。 某种types的STL分配器类也可以工作,但我试图避免任何堆,甚至静态分配每个线程堆(虽然其中之一是我的第二select)。 堆栈效率更高。 对于使用vector的当前代码来说,它几乎是一个代替。 对于我正要写自己,我正在想这样的事情: char buffer[4096]; stack_vector<match_item> matches(buffer, sizeof(buffer)); 或者类可以有内部分配的缓冲区空间。 然后它会看起来像: stack_vector<match_item, 256> matches; 我以为它会抛出std :: bad_alloc,如果它运行的空间,尽pipe这不应该发生。 更新 使用Chromium的stack_container.h很好用! 我没有想到这样做自己的原因是我一直忽略了对STL集合构造函数的allocator对象参数。 我已经使用了模板参数几次做静态池,但我从来没有看到代码或写任何实际使用的对象参数。 我学到了一些新东西。 很酷! 该代码有点混乱,由于某些原因,GCC强迫我将分配器声明为实际项目,而不是将其构造成向量的分配器参数。 它从这样的东西: typedef std::pair< const char *, const char * > comp_list_item; typedef std::vector< comp_list_item > comp_list_type; comp_list_type match_list; match_list.reserve(32); 对此: static const size_t comp_list_alloc_size = 128; typedef std::pair< […]

如何获得原始数据的std :: vector指针?

我试图使用std::vector作为char数组。 我的函数需要一个void指针: void process_data(const void *data); 在我简单地使用这个代码之前: char something[] = "my data here"; process_data(something); 其中按预期工作。 但是现在我需要std::vector的dynamic性,所以我尝试了这个代码: vector<char> something; *cut* process_data(something); 问题是,如何将char向量传递给我的函数,以便我可以访问向量原始数据(不pipe是哪种格式 – 浮动等)? 我试过这个: process_data(&something); 和这个: process_data(&something.begin()); 但是它返回了一个指向乱码数据的指针,后者给出警告: warning C4238: nonstandard extension used : class rvalue used as lvalue 。