草庐IT

vector_c

全部标签

c++ - 使用 Visual Studio 编译器在编译时获取 vector 元素的大小(即使它是空的)

这个问题在这里已经有了答案:HowcanIgetsizeofavector::value_type?(4个答案)关闭3年前。给定某种类型元素的std::vector,我如何使用VisualStudio编译器在编译时确定这些元素类型的大小。在第一个元素上使用sizeof不是一个选项,因为vector可能为空。对于clang和gcc,我可以这样做:#includetemplatesize_tsize_of_vector_elements(std::vectorvector){returnsizeof(T);}intsquare(intnum){std::vectorvector;retur

C++14 从可变参数模板创建 vector

假设,我有一个结构structA{std::stringname;};并想写一个函数从对象中读取字段“name”并返回它们作为std::vector.是否可以通过可变参数模板(或任何非迭代方法)来做到这一点。我的目标是这样的:templatestd::vectorfunction(Ts...ts){...}在程序中:Aa1,a2,a3,a4;function(a1,a2,a3,a4);输出:{a1.name,a2.name,a3.name,a4.name} 最佳答案 适用于C++11的非常简单的扩展:templatestd::vec

c++ - std::vector::erase(iterator position) 不一定调用相应元素的析构函数

假设我有一个包含5个元素的std::vectorV,V.erase(V.begin()+2)删除第三个元素。STLvector实现会将第4和第5个元素向上移动,然后破坏第5个元素。即删除vector中的元素i并不能保证调用ith析构函数。对于std::list,情况并非如此。删除ith元素会调用ith元素的析构函数。STL对这种行为有何看法?这是从我系统的STL_vector.h中获取的代码:392iteratorerase(iterator__position){393if(__position+1!=end())394copy(__position+1,_M_finish,__po

c++ - 移除 vector 元素使用 vector<bool> 中的条件

我有两个大小相同的vectora和b。vectora{4,3,1,3,1};vectorb{false,false,true,false,true};如果b中的相同元素(相同索引)为真,我想删除a中的元素。应用函数后:a=4,3,3注意:我想使用std算法或函数而不是简单的for循环。 最佳答案 std::vectorv{1,2,3,4,5,6};std::vectorb{true,false,true,false,true,false};v.erase(std::remove_if(v.begin(),v.end(),[&b,&v

c++ - std::vector::erase 与 "swap and pop"

从vector中删除元素的“正常”方式是这样的:vec.erase(vec.begin()+index);但理论上这样做会更快:if(vec.size()>1){std::iter_swap(vec.begin()+index,vec.end()-1);vec.pop_back();}else{vec.clear();}有什么理由不使用后者吗? 最佳答案 第二种情况不保留vector中元素的顺序。如果这是一个已排序的vector或顺序很重要,那么在第一种情况下,您刚刚打破了第二种情况,而第一种情况将使顺序保持不变。

c++ - 从两个 vector 创建 map

如果我有两个STLvectorvect1、vect2并且我想从它们生成一个映射,那么vect1中的第一个元素将对应于vect2中的第一个元素,依此类推。我怎样才能以最简单的方式做到这一点? 最佳答案 这是一个使用标准库函数(和C++0xlambda)的解决方案。constintdata1[]={0,2,4,6,8};constintdata2[]={1,3,5,7,9};std::vectorvec1(data1,data1+5);std::vectorvec2(data2,data2+5);std::mapmap;//create

ios - 如何使用OpenCV的cv::Mat&获取H.26 4's “Motion Vector”?

我正在使用OpenCViOSSDK。在使用设备预设AVCaptureSessionPresetiFrame1280x720进行捕捉时,我想以30fps的速度从h.264帧获取运动矢量。我想获得数值向量,我相信OpenCV会有所帮助。但要快速研究它对我来说并不容易。我应该使用什么OpenCVcv::Mat方法?是否更像是找到正确的迭代器来提取运动矢量?它是否涉及在执行任何操作之前将捕获的视频数据编码为h.264帧? 最佳答案 OpenCV没有实现h.264编码器,而是使用外部库来压缩视频,您可以在ios上看到它是如何完成的here.如

c++ - 无法在 xcode ios 项目中声明 C++ vector

我正在尝试通过xcode在C++类中使用vector,但它给了我错误。该文件具有C++文件所需的.mm扩展名。这是我的代码:classSynth{private:intbpm;std::vectornotesList;public:};它给了我这两个错误:错误:语义问题:使用未声明的标识符“std”错误:解析问题:预期的成员名称或“;”在声明说明符之后我还尝试在顶部使用usingnamespacestd;但这没有任何区别。知道是什么原因造成的吗? 最佳答案 是的,您需要包含header:#include不要在头文件中使用usingn

Java 读写 Spark Vector 到 Hdfs

我写了Vector的(org.apache.spark.mllib.linalg.Vector)到HDFS如下publicvoidwritePointsToFile(Pathpath,FileSystemfs,Configurationconf,Listpoints)throwsIOException{SequenceFile.Writerwriter=SequenceFile.createWriter(conf,Writer.file(path),Writer.keyClass(LongWritable.class),Writer.valueClass(Vector.class));

vector - java.lang.OutOfMemoryError : Java heap space error while running seq2sparse in mahout 错误

我正在尝试在mahout中使用k-means对一些手工制作的日期进行聚类。我创建了6个文件,每个文件中几乎没有1或2个单词的文本。使用./mahoutseqdirectory从它们中创建一个序列文件。在尝试使用./mahoutseq2sparse命令将序列文件转换为向量时,出现java.lang.OutOfMemoryError:Javaheapspace错误。序列文件大小为0.215KB。命令:./mahoutseq2sparse-imokha/output-omokha/vector-ow错误日志:SLF4J:ClasspathcontainsmultipleSLF4Jbindin