草庐IT

vector_c

全部标签

c++ - std::vector resize(0) 或 clear() - 但保持其容量

我正在将许多对象合并到一个包含渲染数据(网格)的vector中。这个vector在每一帧都被清除和重新填充(好吧,几乎)。问题是,在我的例子中,清除然后再次保留vector大小对性能有巨大影响,因为clear()也可能改变容量。换句话说,我需要控制vector的容量何时发生变化。我想保留旧容量一段时间,直到我自己决定是时候改变它了。我看到两个选项:弄清楚如何控制std::vector的容量何时发生变化为大型内存对象实现内存池,这将获取更新此外,如果调用resize(10),然后又调用了resize(5)会怎么样(只是为了说明,将实际数字乘以几百万)?稍后调用resize(5)是否会导致

c++ - 有效地将 std::unordered_set 的内容移动到 std::vector

在我的代码中,我有一个std::unordered_set,我需要将数据移动到一个std::vector中。我在获取数据时使用std::unordered_set以确保在转换为std::vector之前仅存储唯一值。我的问题是如何最有效地将内容移动到std::vector?移动数据后,我不需要std::unordered_set。我目前有以下内容:std::copy(set.begin(),set.end(),std::back_inserter(vector)); 最佳答案 在C++17之前,你能做的最好的事情是:vector.i

c++ - 警告级别为 3 的 int 的 std::vector push_back 处的编译器警告

我使用的是英特尔C++编译器icc版本18.0.3。如果我编译followingcode使用-w3#includeintmain(){std::vectorvec;vec.push_back(2);return0;}test_w3.cpp(6):remark#383:valuecopiedtotemporary,referencetotemporaryusedvec.push_back(2);Replacing2有一个const变量as#includeintmain(){std::vectorvec;constinta=2;vec.push_back(a);return0;}不发出警告

c++ - 使用 boost c++ ublas 矩阵和 vector 类型进行元素运算

我想对boost矩阵和vector类型执行逐元素函数,例如对每个元素取对数,对每个元素取幂,应用特殊函数,例如gamma和digamma等(类似于matlab对应用于矩阵和vector的这些函数的处理。)我想编写一个辅助函数,为每个所需的函数强制执行此操作就足够了,但这似乎很浪费。同样,boostwiki提供了一些代码到vectorizestandardfunctions,但这看起来相当复杂。建议使用valarray,但我想避免在数据类型之间进行转换,因为我需要ublas数据类型用于其他操作(矩阵乘积、稀疏矩阵等)非常感谢任何帮助。 最佳答案

c++ - 高效计算 vector 组合

出于好奇,我正在研究一个研究问题,但我不知道如何对我想到的逻辑进行编程。让我向您解释一下:我有四个vector,例如,v1=1111v2=2222v3=3333v4=4444现在我要做的是组合添加它们,也就是v12=v1+v2v13=v1+v3v14=v1+v4v23=v2+v3v24=v2+v4v34=v3+v4到这一步就好了。现在的问题是我想为这些vector中的每一个添加一个来自v1、v2、v3、v4的vector,它以前没有添加过。例如:v3和v4还没有添加到v12,所以我想创建v123和v124。同样,对于所有vector,v12shouldbecome:v123=v12+v

c++ - 在 C++ 中,如何使用 vector View 和 gsl_stats_mean 计算整数 vector 的平均值?

我的程序操作整数的STLvector,但有时我需要计算一些关于它们的统计数据。因此,我使用GSL函数。为了避免将STLvector复制到GSLvector中,我创建了一个GSLvectorView,并将其提供给GSL函数,如这段代码所示:#include#include#include#includeusingnamespacestd;intmain(intargc,char*argv[]){vectorstl_v;for(inti=0;i编译后(gcc-lstdc++-lgsl-lgslcblastest.cpp),这段代码输出如下:gsl_v_0=0gsl_v_1=1gsl_v_2

c++ - 在 C++ 中对对象 vector 进行排序

假设我有一个“信息”类,它将人的姓名和年龄存储在一个vector中。所以...classInformation{private:intage;stringname;//etc,etc...};我如何根据年龄对vector进行升序/降序排序?我相信你使用这样的东西。sort(listOfPeople.begin(),listOfPeople.end(),greater());listOfPeople将是vector。如有任何帮助,我们将不胜感激。 最佳答案 如果你想按年龄非降序对它们进行排序,一种方法是定义一个用于比较的仿函数:cla

c++ - 可以使用 vector.back() 为 vector 的最后一个元素赋值吗?

作为特殊情况,我有一些代码需要分配vector的第一个和最后一个元素。somevector.back()是左值吗?下面的代码可以工作吗?some_vector.front()=first_value;some_vector.back()=last_value; 最佳答案 是的,它可以,因为它返回对最后一个元素的引用。最好先确保它不是空的! 关于c++-可以使用vector.back()为vector的最后一个元素赋值吗?,我们在StackOverflow上找到一个类似的问题:

c++ - vector 与双端队列运算符[]

如果我们不断地在容器的前面和后面添加,则应选择双端队列而不是vector。但是抵消呢?vector和deque的operator[]是否相同?如果不是,哪个更快? 最佳答案 Astd::vector是T的平面数组元素。std::deque是由T等大小的数组组成的数组.索引访问的复杂度在这两种情况下都是O(1),但std::deque需要做更多的工作来确定要访问的元素,并且还有一个指示。就像std::deque上的迭代器一样需要进行多次检查(尽管算法可以通过识别分段结构来优化这一点,从而使开销相当小。因此,如果您需要经常使用下标运算符

c++ - 将 vector<int> 转换为定界字符串

如我所见here在C#中,有一种将vector转换为以字符分隔的字符串的快速简便方法:varresult=string.Join(";",data);varresult=string.Join(";",data.Select(x=>x.ToString()).ToArray());我想知道在C++中是否有相同的方法来做到这一点? 最佳答案 #include#include#include#include#includeintmain(){std::vectordata={42,1,2,3,4,5};std::ostringstrea