vector相关内容

std::vector 比普通数组慢很多吗?

我一直认为 std::vector 被“实现为数组"是普遍的智慧,等等等等.今天下楼测试了一下,好像不是这样: 以下是一些测试结果: UseArray 在 2.619 秒内完成UseVector 在 9.284 秒内完成UseVectorPushBack 在 14.669 秒内完成整个过程在 26.591 秒内完成 这大约慢了 3 到 4 倍!并不能真正证明“vector 可能会慢几纳秒 ..
发布时间:2022-01-31 08:50:00 C/C++开发

如何找出一个项目是否存在于 std::vector 中?

我要做的就是检查一个元素是否存在于向量中,这样我就可以处理每种情况. if ( item_present )做这个();别的去做(); 解决方案 你可以使用std::find from : #include #include 向量向量;//可以有其他数据类型而不是 int 但必须与 item 相同的数据类型std::find(vec.begi ..
发布时间:2022-01-30 16:37:05 C/C++开发

在 C++ 中使用数组或 std::vectors,性能差距是什么?

在我们的 C++ 课程中,他们建议不要再在新项目中使用 C++ 数组.据我所知,Stroustroup 本人建议不要使用数组.但是否存在显着的性能差异? 解决方案 应避免将 C++ 数组与 new 一起使用(即使用动态数组).有一个问题是您必须跟踪大小,您需要手动删除它们并进行各种整理. 也不鼓励在堆栈上使用数组,因为您没有范围检查,并且传递数组会丢失有关其大小的任何信息(数组到指针 ..
发布时间:2022-01-30 16:31:04 C/C++开发

两个数字向量上的全对全 setdiff,具有接受匹配的数字阈值

我想要做的或多或少是以下两个线程中讨论的问题的组合: 执行非成对所有两个无序字符向量之间的 -to-all 比较 --- intersect 的反面 --- all-to-all setdiff 合并数据框基于所选阈值内的数字行名并保留不匹配的行 我有两个数字向量: b_1 我想将 b_1 中的 所有 元素与 b_2 中的所有元素进行比较,反之亦然. 如果 b_1 中的 ..
发布时间:2022-01-25 09:07:00 其他开发

我应该使用哪个 STL 容器?C++

我有一个对象“列表",我想从中随机取出对象并将其推到此列表的前面.只会执行这种操作.所以我不需要快速访问列表末尾,只需要它的前面和对任何其他地方的平均访问. 哪个容器最适合这个?我在考虑std::vector,但我读到insert 操作效率不高.然后我想出了 std::deque 因为它可以快速访问前面,但是 erase 在特定位置方法的效率如何? 提前感谢您的帮助. 解决方案 ..
发布时间:2022-01-24 21:26:45 C/C++开发

C++ 在向量中使用不可赋值的对象

我想在 std::vector 中存储一个对象列表,但是这些对象包含一个引用并且无法分配给它.但是,我可以复制构造该对象. 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新安装指针,但是这样做的语法会显着降低可读性,尤其是在使用迭代器时,我更喜欢另一种选择. 不起作用: std::vector我的向量;//填充向量//...我的向量[1] = object1; 智能指针 ..
发布时间:2022-01-24 21:23:30 C/C++开发

在 C++ 容器中作为模板参数提供的分配器和作为构造函数参数提供的分配器之间的区别?

为 STL 容器(例如 std::vector)提供分配器作为模板参数有什么区别,例如: std::vector>一些整数; 并提供一个分配器作为构造函数参数,例如: std::allocator温度;std::vector一些整数(临时); 考虑到它们不是同一个东西(即一个提供一个类型,另一个提供一个类型实例)并且可以彼此分开使用,那么它们的优点是什么? 解决方案 可以 ..
发布时间:2022-01-24 21:09:59 C/C++开发

c++中数组的动态大小?

我很困惑.我不知道我应该使用什么容器.我先告诉你我需要什么.基本上我需要一个可以存储X个对象的容器(对象的数量是未知的,可能是1-50k). 我读了很多,在这里 数组与列表 它说:数组需要如果对象的数量未知,则调整大小(我不确定如何在 C++ 中调整数组的大小),并且它还指出,如果使用链表,如果要搜索某个项目,它将从第一个循环(迭代)结束(反之亦然),而数组可以指定“索引处的数组对象". ..
发布时间:2022-01-24 20:58:25 C/C++开发

std::list 和 std::vector - 两全其美?

向量与STL中的列表: std::vector:最后的插入是恒定的,摊销的时间,但其他地方的插入是一个代价高昂的 O(n). std::list:您不能随机访问元素,因此获取列表中的特定元素可能会很昂贵. 我需要一个容器,这样您既可以在 O(1) 时间内访问任何索引处的元素,也可以在 O(1) 时间内在任何索引处插入/删除元素.它还必须能够管理数千个条目.有这样的容器吗? ..
发布时间:2022-01-24 20:55:54 C/C++开发

如果我使用 vector::begin() 而不是 std::back_inserter(vector) 作为 set_intersection 的输出会发生什么?

我一直在使用高度简洁和直观的 C​​++ 语法来查找两个已排序 vector 的交集并将结果放入第三个 vector: 矢量a,b,c;//...std::set_intersection(a.begin(),a.end(),b.begin(),b.end(),std::back_inserter(c)); 这应该将 c 设置为交集(a,b),假设 a 和 b 已排序. 但是如果我只使用 ..
发布时间:2022-01-24 20:54:04 C/C++开发

STL Containers 分配放置新

我找不到这个问题的确切答案,因此在这里发布.当我想到向量时,它需要在连续的内存位置构建对象.这意味着向量保持分配的内存,并且必须对被推入其中的对象进行就地构造(=放置新).这是一个有效的假设吗?另外,这是否意味着容器正在手动调用析构函数而不是调用删除?我在这里缺少任何其他假设吗?这是否意味着我可以假设如果我选择编写,即使是为对象编写的自定义 new 也可能不会被调用? 此外,列表使用 new ..
发布时间:2022-01-24 20:52:14 C/C++开发

将动态数组包装到 STL/Boost 容器中?

我需要将一个动态分配的数组(例如从 a = new double[100] 中)包装到 std::vector(最好)而不复制数组.这个限制是由于我要包装的数组是从文件中映射的,所以只需执行 vector(a, a+size) 就会使内存使用量加倍. 有什么技巧可以做到吗? 解决方案 最好的解决方案之一是 STLSoft 的 array_proxy 模板.不幸的是,doxygen 从 ..
发布时间:2022-01-24 20:43:57 C/C++开发