Tag: 向量

将一个std :: vector追加到另一个std :: vector的最有效方法是什么?

设v1为目标vector,v2需要追加到它的后面。 我现在在做: v1.reserve(v1.size() + v2.size()); copy(v2.begin(), v2.end(), back_inserter(v1)); 这是最有效的方法吗? 或者可以通过复制一块内存来完成? 谢谢!

有没有一个sorted_vector类,它支持插入()等?

通常,使用sorting的std::vector而不是std::set会更高效。 有没有人知道一个库类sorted_vector ,它基本上有一个类似std::set接口,但插入元素到sorting的向量(所以没有重复),使用二进制search来find元素等? 我知道这不难写,但最好不要浪费时间,而是使用现有的实现。 更新:使用sorting向量而不是集合的原因是:如果您有几十万个只包含10个左右成员的小集合,那么只需使用sorting向量就可以提高内存效率。

如何从指定的号码(不带名称)中提取号码?

我正在寻找B1(newx)线性模型系数的值,而不是名称。 我只是想要0.5的值。 我不想要“newx”这个名字。 newx <- c(0.5,1.5.2.5) newy <- c(2,3,4) out <- lm(newy ~ newx) out看起来像: Call: lm(formula = newy ~ newx) Coefficients: (Intercept) newx 1.5 1.0 我到了这里 但现在我卡住了。 out$coefficients["newx"] newx 1.0

为什么使用QVector(Qt)而不是std :: vector

我对C ++和Qt非常陌生,但我非常擅长C#/ Java。 关键是我喜欢跨平台,但是我和Qt混淆了。 不是std::vector已经是跨平台的,不是提供了一个相当于非跨平台的东西吗? 另外, File和QFile不同? 链接会很好,谢谢:)

* *不*初始化其成员的C ++向量?

我正在为一个返回一个大数组的C代码做一个C ++包装器,所以我试图在一个vector<unsigned char>返回数据。 现在的问题是,数据是在兆字节的数量级 , vector不必要地初始化其存储,这本质上是减less了一半的速度。 我如何防止这种情况? 或者,如果这是不可能的 – 是否有其他的STL容器可以避免这种不必要的工作? 或者我必须最终制造我自己的容器? (预C ++ 11) 注意: 我传递的vector作为我的输出缓冲区 。 我不是从其他地方复制数据。 这是像这样的: vector<unsigned char> buf(size); // Why initialize?? GetMyDataFromC(&buf[0], buf.size());

将vector传递给函数,值与参考C ++

我用C ++编写。 如果我有一些函数void foo(vector<int> test)并且在我的程序中调用它,vector是通过值还是引用传递的? 我不确定,因为我知道向量和数组是相似的,像void bar(int test[])这样的函数将通过引用(指针?)而不是按值传递testing。 我的猜测是,如果我想避免传值,但是我不确定,我需要明确地通过指针/引用来传递向量。

从unordered_map获取键和值的列表

从unordered_map获取键和值的列表(作为vector )的最有效方法是什么? 为了具体,假设有问题的地图是一个unordered_map<string, double> 。 然后,我想将键作为一个vector<string> ,并将这些值作为一个vector<double> 。 unordered_map<string, double> um; vector<string> vs = um.enum_keys(); vector<double> vd = um.enum_values(); 我可以遍历地图并收集结果,但有没有更有效的方法? 有一个方法也可以用于普通地图,因为我可能会切换到这个地方。

为什么不emplace_back()使用统一的初始化?

以下代码: #include <vector> struct S { int x, y; }; int main() { std::vector<S> v; v.emplace_back(0, 0); } 使用GCC编译时出现以下错误: In file included from c++/4.7.0/i686-pc-linux-gnu/bits/c++allocator.h:34:0, from c++/4.7.0/bits/allocator.h:48, from c++/4.7.0/vector:62, from test.cpp:1: c++/4.7.0/ext/new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& …) [with _Up = S; _Args = {int, int}; _Tp = S]': c++/4.7.0/bits/alloc_traits.h:265:4: required from 'static typename std::enable_if<std::allocator_traits<_Alloc>::__construct_helper<_Tp, […]

使用C ++ vector :: insert()添加到向量的末尾

我写了一小段代码,我必须根据向量元素中的值,将值插入到某个地方的C ++ STL向量中。 我正在使用insert()函数来完成此操作。 我意识到,当我想添加一个新的元素到vector的末尾,我可以简单地使用push_back() 。 但为了保持我的代码看起来不错,我想独占地使用insert() ,它将所需的插入点和要插入的值之后的迭代器指向元素。 如果作为参数传入的迭代器的值是v.end() ,其中v是我的向量,这将与push_back()一样工作吗? 非常感谢!

为什么是std :: vector :: operator 比std :: vector :: at()快5到10倍?

在程序优化期间,试图优化循环遍历一个向量,我发现以下事实::: std :: vector :: at()比operator []要慢得多! 在释放和debugging版本(VS2008 x86)中,运算符[]比()的速度快5到10倍 。 在网上阅读让我意识到在()有边界检查。 好的,但是,放慢操作达10倍?! 这有什么理由吗? 我的意思是,边界检查是一个简单的数字比较,还是我错过了什么? 问题是这个性能打击的真正原因是什么? 还有, 有什么办法可以让它更快 ? 我当然会在其他代码部分(我已经有自定义的边界检查!)与[]调用我所有的()调用。 概念validation: #define _WIN32_WINNT 0x0400 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <conio.h> #include <vector> #define ELEMENTS_IN_VECTOR 1000000 int main() { __int64 freq, start, end, diff_Result; if(!::QueryPerformanceFrequency((LARGE_INTEGER*)&freq)) throw "Not supported!"; freq /= 1000000; // microseconds! ::std::vector<int> vec; vec.reserve(ELEMENTS_IN_VECTOR); for(int […]