Tag: vector

启用C ++ 11时,std :: vector的性能回归

当我启用C ++ 11时,我在一个小的C ++代码片段中发现了一个有趣的性能回归: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } 用g ++(GCC)4.8.2 20131219(prerelease)和C ++ 03我得到: milian:/tmp$ g++ -O3 main.cpp && perf stat -r 10 ./a.out […]

VBO与std :: vector

我用C ++编写了一个OpenGL的模型加载器。 我已经使用std::vector来存储我的顶点数据,但是现在我想把它传递给glBufferData() ,但是数据types是非常不同的。 我想知道是否有一种方法来在std::vector之间转换glBufferData()logging的const GLvoid * 。 顶点types typedef struct { float x, y, z; float nx, ny, nz; float u, v; } Vertex; vector<Vertex> vertices; glBufferData()调用 glBufferData(GL_ARRAY_BUFFER, vertices.size() * 3 * sizeof(float), vertices, GL_STATIC_DRAW); 我得到以下(预期)的错误: error: cannot convert 'std::vector<Vertex>' to 'const GLvoid*' in argument passing 如何将vector转换为与glBufferData()兼容的types? NB。 我现在不关心正确的内存分配。 vertices.size() * 3 * sizeof(float)最有可能是段错误,但我想先解决types错误。

如何分配对angular线上的值?

假设我有一个N×NmatrixA,一个由数字1:N的子集和一个K值组成的索引向量V,我想这样做: for i = V A(i,i) = K end 有没有办法做到这一点在一个声明瓦特/vector化? 例如A( 某物 )= K 声明A(V,V) = K将不起作用,它分配非对angular元素,这不是我想要的。 例如: >> A = zeros(5); >> V = [1 3 4]; >> A(V,V) = 1 A = 1 0 1 1 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 0 […]

如何从C风格的数组初始化std :: vector?

什么是最便宜的方式来初始化一个C风格的数组的std::vector ? 例子:在下面的类中,我有一个vector ,但由于外部的限制,数据将作为C风格的数组传递: class Foo { std::vector<double> w_; public: void set_data(double* w, int len){ // how to cheaply initialize the std::vector? } 显然,我可以调用w_.resize() ,然后遍历元素,或者调用std::copy() 。 有没有更好的方法?

从相同的向量中push_back元素是否安全?

vector<int> v; v.push_back(1); v.push_back(v[0]); 如果第二个push_back导致重新分配,则向量中对第一个整数的引用将不再有效。 所以这不安全? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); 这使它安全?

如何逐步绘制vectorpath? (Raphael.js)

如何animation像绘制的vectorpath,逐步? 换句话说,逐个像素缓慢地显示path。 我正在使用Raphaël.js , 但是如果你的答案不是库特定的,比如说可能有一些用于做这种事情的一般编程模式(我对vectoranimation相当陌生),这是值得欢迎的! 使用直线path很容易,就像在该页面上的示例一样简单:: path("M114 253").animate({path: "M114 253 L 234 253"}); 但是尝试改变那个页面上的代码,这样说: path("M114 26").animate({path: "M114 26 C 24 23 234 253 234 253"}); 你会明白我的意思 path肯定是从初始状态(点“M114 26”)到结束状态(从点“M114 26”开始的曲线“C 24 23 234 253 234 253”)animation的,但不是以问题指定的方式,而不是它正在绘制。 我不明白animateAlong如何做到这一点。 它可以沿着一条pathanimation一个物体,但是如何让这条path在物体沿着它被animation的时候逐渐显示出来呢? 解决scheme? (通过陨石的答案 ) 似乎目前最好的方法是通过使用原始SVG的“虚假”破折号。 有关解释,请参阅本演示或本文档 ,第4页。 如何产生渐进式绘画? 我们必须使用stroke-dasharray和stroke-dashoffset并且知道曲线的长度。 此代码在屏幕上为圆,椭圆,折线,多边形或path绘制任何内容: <[element] style="stroke-dasharray:[curve_length],[curve_length]; stroke-dashoffset:[curve_length]"/> 如果在animation元素stroke-dashoffset减less到0,我们得到曲线的渐进绘制。 <circle cx="200" cy="200" r="115" style="fill:none; […]

在MATLAB版本7中相当于pdist2

我需要计算matlab中2个matrix之间的欧式距离。 目前我使用bsxfun和计算距离如下(我附上一段代码): for i=1:4754 test_data=fea_test(i,:); d=sqrt(sum(bsxfun(@minus, test_data, fea_train).^2, 2)); end fea_test的大小是4754×1024,fea_train是6800×1024,使用for循环导致执行for花了大约12分钟,我认为这太高了。 有没有办法计算两个matrix之间的欧氏距离更快? 我被告知,通过删除不必要的循环,我可以减less执行时间。 我也知道,pdist2可以帮助减less计算时间,但是因为我使用的是matlab版本7,所以没有pdist2函数。 升级不是一个选项。 任何帮助。 问候, 巴维亚

如何将Vector分割成列 – 使用PySpark

上下文:我有一个DataFrame 2列:单词和vector。 其中“向量”的列types是VectorUDT 。 一个例子: word | vector assert | [435,323,324,212…] 我想得到这个: word | v1 | v2 | v3 | v4 | v5 | v6 …… assert | 435 | 5435| 698| 356|…. 题: 如何使用pyspark为每个维度在多个列中使用向量分隔列? 提前致谢

如何将一个向量分成规则的,连续的序列组?

我有一个向量,例如c(1, 3, 4, 5, 9, 10, 17, 29, 30) ,我想将在“不规则”向量中构成规则连续序列的“相邻”元素组合在一起导致: L1:1 L2:3,4,5 L3:9,10 L4:17 L5:29,30 天真的代码(一个前C程序员): partition.neighbors <- function(v) { result <<- list() #jagged array currentList <<- v[1] #current series for(i in 2:length(v)) { if(v[i] – v [i-1] == 1) { currentList <<- c(currentList, v[i]) } else { result <<- c(result, list(currentList)) currentList <<- v[i] […]

c ++ Vector,每当它在堆栈上展开/重新分配时会发生什么?

我是新来的C + +,我在我的项目上使用vector类。 我发现它非常有用,因为我可以有一个数组,在必要时自动重新分配(例如,如果我想push_back一个项目,并且vector已经达到了最大容量,它会重新分配自己,向操作系统请求更多的内存空间)访问vector的元素非常快(它不像列表,为了达到“第n个”元素,我必须通过“n”个第一个元素)。 我发现这个问题非常有用,因为他们的答案完美地解释了“内存分配器”是如何工作的,当我想把我的vector存储在堆/栈上时: [1] vector<Type> vect; [2] vector<Type> *vect = new vector<Type>; [3] vector<Type*> vect; 然而,有一个疑问是困扰我一段时间,我无法find答案:每当我构build一个向量,并开始推入大量的项目,它会达到vector将满的一刻,所以继续增长它将需要重新分配,复制自己到一个新的位置,然后继续push_back项目(显然,这个重新分配它隐藏在类的实现,所以它是完全透明的我) 好的,如果我已经在堆上创build了这个向量[2],我不会想象会发生什么事情:类向量调用malloc,获取新的空间,然后将自身复制到新的内存中,最后删除自由调用的旧内存。 然而,当我在栈上构造一个向量时,面纱隐藏了发生的事情:当向量必须重新分配时,会发生什么? AFAIK,无论何时在C / C ++中input一个新的函数,计算机都会查看variables的声明,然后展开堆栈以获得必要的空间来放置这些variables,但是在堆栈中不能分配更多的空间function已经在运行。 类vector如何解决这个问题?