我正在尝试从条目列表构造一组唯一的单词,每个条目都有一个字符串向量.
所以我创建了一个名为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)
我期待着这一点
(以让STL为您尽可能多的理念为指导).但是,我惊讶地发现这种实施实际上需要更长时间; 没有多少,但比以前的基于for循环的实现多200毫秒.
我知道这是一个基本上微不足道的速度差异,但我仍然感到惊讶.
所以我的问题是:为什么我的实施更快? …
在学习围棋的过程中,我一直在制作自己的库。这是我所做的:在我的 $GOPATH/src 我有两个文件夹:mylibs和test. 该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)
所以目录结构是这样的:
问题是当我尝试编译时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,然后它工作。
但我看不出为什么这行不通的原因。有任何想法吗?