小编tes*_*ing的帖子

STL复制功能的效率

我正在尝试从条目列表构造一组唯一的单词,每个条目都有一个字符串向量.

所以我创建了一个名为Insert的函数,它会为每个条目调用,如下所示:

for( auto & e : _Entries )
    _Dictionary.Insert( begin( e.getNameWords( ) ), end( e.getNameWords( ) ) );
Run Code Online (Sandbox Code Playgroud)

类_Dictionary内部有一个set(STL容器),我编写了函数Insert,如下所示:

template< typename InputIterator >
void Insert( InputIterator first, InputIterator last )
{
    for( auto it = first ; it != last ; ++it )
        _AllWords.insert( *it );
 }
Run Code Online (Sandbox Code Playgroud)

在我的例子中,为_Entries中的所有条目调用Insert平均花费570毫秒.

然后我认为我应该使用STL已经具有的函数来执行与Insert中的for循环相同的操作,因此我将函数Insert更改为以下内容:

template< typename InputIterator >
void Insert( InputIterator first, InputIterator last )
{
    copy( first, last, inserter( _AllWords, begin( _AllWords ) ) );

}
Run Code Online (Sandbox Code Playgroud)

我期待着这一点

  1. 更正确,并且
  2. 至少同样快,如果不是更快

(以让STL为您尽可能多的理念为指导).但是,我惊讶地发现这种实施实际上需要更长时间; 没有多少,但比以前的基于for循环的实现多200毫秒.

我知道这是一个基本上微不足道的速度差异,但我仍然感到惊讶.

所以我的问题是:为什么我的实施更快? …

c++ stl c++11

7
推荐指数
1
解决办法
204
查看次数

如何使 go build 与嵌套目录一起工作

在学习围棋的过程中,我一直在制作自己的库。这是我所做的:在我的 $GOPATH/src 我有两个文件夹:mylibstest. 该test文件夹有一个名为的文件test.go,其中包含

package test

import "mylibs/hi/saysHi"

func main() {
    saysHi.SayHi()
}
Run Code Online (Sandbox Code Playgroud)

mylibs文件夹包含另一个名为的文件夹hi,其中有一个名为的文件,其中saysHi.go包含:

package saysHi

import "fmt"

func SayHi() {
    fmt.Printf("Hi\n")
}
Run Code Online (Sandbox Code Playgroud)

所以目录结构是这样的:

  • GOPATH/源代码
    • 测试
      • 测试
    • mylibs
      • 你好
        • 说嗨

问题是当我尝试编译时test它抱怨说

cannot find package "mylibs/hi/saysHi" in any of: 
    [...]
    $GOPATH/src/mylibs/hi/saysHi (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)

我故意使目录结构比必要的更深。如果我做,我把一个简单的目录结构saysHi.go$GOPATH/saysHi/saysHi.go,然后它工作。

但我看不出为什么这行不通的原因。有任何想法吗?

go

0
推荐指数
1
解决办法
1074
查看次数

标签 统计

c++ ×1

c++11 ×1

go ×1

stl ×1