小编Syl*_*inD的帖子

stl中的一些容器没有查找功能

一些STL容器例如std::liststd::vector没有find()方法作为成员函数.这是为什么?我知道有使用的替代std::find<algorithm>,但仍然使用这也不是100%纯天然.

c++ containers stl

24
推荐指数
3
解决办法
1899
查看次数

为什么std :: map(以及STL中的其他关联容器)没有front()方法?

STL参考似乎使之间的概念上的差异:

  • 'Sequence containers'(数组向量deque forward_list list)一方面
  • 另一方面,'关联容器'(设置multiset map multimap unordered_set unordered_multiset unordered_map unordered_multimap).

而且,似乎我们有:

  • 实现begin()返回指向容器中第一个元素的迭代器的方法的所有容器.
  • 只有序列容器有一个front()方法返回对容器中第一个元素的引用.

我的理解是,通过仅取消引用其返回值,可以根据front()方法轻松定义该begin()方法.

因此,我的问题是:为什么不为front()定义方法的所有对象定义begin()方法?(真的应该是每个容器)

(我想从语义的角度来看,从地图中获取第一个元素并不像从矢量中获取第一个元素那样有意义,但我想知道是否有更有效的解释).

c++ containers iterator stl map

14
推荐指数
2
解决办法
4838
查看次数

使用Google C++ Mocking Framework(Google Mock)将任意参数传递给invocked方法(V1.5)

我有一个模拟方法.当它被调用时,我希望它在调用其正常行为之前调用另一个函数.就像是 :

EXPECT_CALL(*my_obj, MockedMethod(_,_,_,_,_,_))
    .WillOnce(DoAll(
        Invoke(my_obj, &SomeAdditionalMethodIWantToCall),
        Invoke(my_obj, &DefaultBehavior),
        ));
Run Code Online (Sandbox Code Playgroud)

唯一的问题是SomeAdditionalMethodIWantToCall期望参数与提供的参数完全无关MockedMethod.我希望能够给他们,但我正在努力学习语法.我希望有类似的东西(假句法):

EXPECT_CALL(*my_obj, MockedMethod(_,_,_,_,_,_))
    .WillOnce(DoAll(
        Invoke(my_obj, &SomeAdditionalMethodIWantToCall, arg1, arg2, arg3),
        Invoke(my_obj, &DefaultBehavior),
        ));
Run Code Online (Sandbox Code Playgroud)

我在文档中找到了这样的东西而没有任何成功.

使用函数或Functor作为动作时,我们有:

  • Invoke(f),Invoke(object_pointer, &class::method),InvokeWithoutArgs(f),InvokeWithoutArgs(object_pointer, &class::method)这将只是向前(或不)提供给嘲笑功能的参数,当它被调用.

  • InvokeArgument<N>(arg1, arg2, ..., argk) 似乎是为了调用其中一个参数.

复合动作中

  • WithArg<N>(a)并且WithArgs<N1, N2, ..., Nk>(a)似乎是选择转发原始函数中的哪些参数.

我想我错过了一些非常明显的东西,但我有点卡在这里,所以任何建议都会有所帮助.

c++ parameters unit-testing mocking googlemock

11
推荐指数
2
解决办法
8742
查看次数

迭代数组两次(笛卡尔积),但只考虑一半的元素

我试图迭代一个数组两次以拥有元素对(e_i,e_j),但我只想要i <j的元素.

基本上,我想要的就像是C语言.

int my_array[N] = ...;
for (int i=0; i<N; i++)
        for (int j=i+1; j<N; j++)
                something(my_array[i],my_array[j]);
Run Code Online (Sandbox Code Playgroud)

我没有找到我在itertools中寻找的东西(我发现的最接近的东西itertools.product(*iterables[, repeat])).

我尝试了一些事情,但我并不相信他们中的任何一个:

my_list=range(10)

# Using enumerate and slices - explicit loop
res=[]
for i,j in enumerate(my_list):
        for k in my_list[i+1:]:
                res.append((j,k))
print res

# Using enumerate and slices - list comprehension
res=[(j,k) for i,j in enumerate(my_list) for k in my_list[i+1:]]
print res

# Using enumerate and xrange - explicit loop
res=[]
for i,j in enumerate(my_list):
        for k …
Run Code Online (Sandbox Code Playgroud)

python combinations iterator python-itertools

3
推荐指数
1
解决办法
1475
查看次数