找到a中所有元素之和的好方法是std::vector什么?
假设我有一个std::vector<int> vector包含少量元素的向量.现在我想找到所有元素的总和.有什么不同的方式?
我在Effective STL中注意到了
vector是默认情况下应该使用的序列类型.
这是什么意思?似乎忽略效率vector可以做任何事情.
任何人都可以给我一个vector不可行的选择但list必须使用的场景吗?
我必须在R中将一个向量分成n个大小相等的块.我找不到任何基本函数来做到这一点.谷歌也没有把我带到任何地方.所以这就是我想出来的,希望它可以帮助某些人.
x <- 1:10
n <- 3
chunk <- function(x,n) split(x, factor(sort(rank(x)%%n)))
chunk(x,n)
$`0`
[1] 1 2 3
$`1`
[1] 4 5 6 7
$`2`
[1] 8 9 10
Run Code Online (Sandbox Code Playgroud)
任何评论,建议或改进都非常受欢迎和赞赏.
干杯,塞巴斯蒂安
我想检查std::vectorGDB中的内容,我该怎么做?让我们说这是std::vector<int>为了简单起见.
我一直认为这std::vector是"作为阵列实施的一般智慧",等等等等等等.今天我去了测试它,似乎不是这样:
这是一些测试结果:
UseArray completed in 2.619 seconds
UseVector completed in 9.284 seconds
UseVectorPushBack completed in 14.669 seconds
The whole thing completed in 26.591 seconds
Run Code Online (Sandbox Code Playgroud)
这大约慢了3-4倍!没有真正证明" vector可能会慢几纳米"的评论.
我使用的代码:
#include <cstdlib>
#include <vector>
#include <iostream>
#include <string>
#include <boost/date_time/posix_time/ptime.hpp>
#include <boost/date_time/microsec_time_clock.hpp>
class TestTimer
{
public:
TestTimer(const std::string & name) : name(name),
start(boost::date_time::microsec_clock<boost::posix_time::ptime>::local_time())
{
}
~TestTimer()
{
using namespace std;
using namespace boost;
posix_time::ptime now(date_time::microsec_clock<posix_time::ptime>::local_time());
posix_time::time_duration d = now - start;
cout << name << " completed in " << …Run Code Online (Sandbox Code Playgroud) 在我们的C++课程中,他们建议不再在新项目中使用C++数组.据我所知,Stroustroup本人建议不要使用数组.但是有显着的性能差异吗?
所以,我编写了一堆代码,通过index []访问stl向量中的元素,但现在我只需要复制一个向量的块.它看起来像vector.insert(pos, first, last)我想要的功能......除了我只有第一个和最后一个作为整数.有没有什么好方法可以获得这些值的迭代器?
我想像数组一样初始化一个向量.
例
int vv[2] = {12, 43};
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候,
vector<int> v(2) = {34, 23};
Run Code Online (Sandbox Code Playgroud)
要么
vector<int> v(2);
v = {0, 9};
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
在'{'标记之前预期的primary-expression
和
错误:预期','或';' 在'='之前
分别.
似乎VectorScala收集派对迟到了,所有有影响力的博客帖子已经离开了.
在Java中ArrayList是默认的集合 - 我可能会使用,LinkedList但只有当我通过算法并且足够小心地进行优化时才会使用.在Scala中,我应该使用Vector我的默认设置Seq,还是尝试在List实际上更合适时使用?
好吧,这真的很难承认,但我现在确实有很强的诱惑力来继承std::vector.
我需要大约10个定制的矢量算法,我希望它们直接成为矢量的成员.但我自然也希望拥有剩下std::vector的界面.好吧,作为一个守法的公民,我的第一个想法是std::vector在MyVector课堂上有一个成员.但是我必须手动重新编写所有std :: vector的接口.打字太多了.接下来,我考虑了私有继承,所以我不会using std::vector::member在公共部分写一些方法而不是重新提取方法.实际上这也很乏味.
在这里,我确实认为我可以简单地从公开继承std::vector,但在文档中提供警告,不应该多态地使用此类.我认为大多数开发人员都有足够的能力去理解这不应该以多态方式使用.
我的决定绝对没有道理吗?如果是这样,为什么?你能提供一个替代方案,其他成员实际上是成员,但不会涉及重新输入所有vector的界面吗?我对此表示怀疑,但如果可以,我会很高兴.
此外,除了一些白痴可以写类似的事实
std::vector<int>* p = new MyVector
Run Code Online (Sandbox Code Playgroud)
使用MyVector 有任何其他现实危险吗?通过说现实,我放弃像想象一个带有指向矢量的指针的函数...
好吧,我已经陈述了我的情况.我犯罪了.现在由你来原谅我了不起:)
vector ×10
c++ ×8
stl ×6
arrays ×3
debugging ×1
declaration ×1
gdb ×1
inheritance ×1
iterator ×1
list ×1
oop ×1
performance ×1
r ×1
scala ×1