小编HAL*_*000的帖子

C++ map <std :: string> vs map <char*> performance(我知道,"再次?")

我正在使用带std::string钥匙的地图,虽然一切正常,但我没有达到预期的性能.我搜索了一些地方来优化和改进一些东西,当一位同事说,"那个字符串键会变慢."

我读了几十个问题,他们一直说:

"不要使用char *键作为键"
" std::string键永远不是你的瓶颈"
"a char *和a 之间的性能差异std::string是一个神话."

我不情愿地尝试了一把char *钥匙而且有区别,差别很大.

我将问题归结为一个简单的例子:

#include <stdio.h>
#include <stdlib.h>
#include <map>

#ifdef USE_STRING

#include <string>
typedef std::map<std::string, int> Map;

#else

#include <string.h>
struct char_cmp { 
    bool operator () (const char *a,const char *b) const 
    {
        return strcmp(a,b)<0;
    } 
};
typedef std::map<const char *, int, char_cmp> Map;

#endif

Map m;

bool test(const char *s)
{
    Map::iterator it = m.find(s);
    return it != m.end(); …
Run Code Online (Sandbox Code Playgroud)

c++ performance dictionary stdmap

41
推荐指数
3
解决办法
5万
查看次数

为什么push_back比先前分配的向量的operator []慢

我刚刚阅读了这篇博客http://lemire.me/blog/archives/2012/06/20/do-not-waste-time-with-stl-vectors/,比较了operator[]作业的性能和push_back预留的内存std::vector,我决定亲自尝试一下 操作很简单:

// for vector
bigarray.reserve(N);

// START TIME TRACK
for(int k = 0; k < N; ++k)
   // for operator[]:
   // bigarray[k] = k;
   // for push_back
   bigarray.push_back(k);
// END TIME TRACK

// do some dummy operations to prevent compiler optimize
long sum = accumulate(begin(bigarray), end(array),0 0);
Run Code Online (Sandbox Code Playgroud)

这是结果:

 ~/t/benchmark> icc 1.cpp -O3 -std=c++11
 ~/t/benchmark> ./a.out
[               1.cpp:   52]     0.789123s  --> C++ new
[               1.cpp:   52]     0.774049s  --> C++ new
[               1.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector c++11

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

如何从日食中删除断点?

我正面临着日食[Ganymede]的奇怪问题.一旦我在我的代码中添加了一些断点,现在甚至在我删除所有这些断点之后,当我开始日食时它再次出现.
因此,定期首先要做的是在启动eclipse后我必须做的事情是手动删除所有断点以开始工作.可能eclipse会将有关这些断点的信息存储在某个文件中,我想,如果我删除该文件,我的问题可能会得到解决.如果您有解决方案,请告诉我.

eclipse breakpoints

27
推荐指数
3
解决办法
4万
查看次数

如何在Unity中设置单元测试并修复缺少的程序集引用错误?

我创建了以下结构:

??? Assets
??? Scenes
??? Scripts
?   ??? MyExample.cs
??? Tests
?   ??? MyExampleTest.cs
?   ??? Tests.asmdef
Run Code Online (Sandbox Code Playgroud)

现在,当我单击Run Run,在Test Runner窗口中,在Unity中,我有以下错误:

The type or namespace name `MyExample' could not be found. Are you missing an assembly reference?
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中,我有两个项目:

  • Assembly-CSharp(包含src)

  • 测试(包含测试)

我在第二个项目中添加了Assembly-CSharp作为参考.Visual Studio能够构建没有错误的解决方案.

有谁知道如何为Unity项目正确设置UnitTest回归?

这是Tests.asmdef

{
    "name": "Tests",
    "optionalUnityReferences": [
        "TestAssemblies"
    ]
}
Run Code Online (Sandbox Code Playgroud)

MyExampleTest.cs

using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using abc;

public class MyExampleTest{

    [Test]
    public void NewTestScriptSimplePasses() {
        // Use the Assert class to test conditions. …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing unity-game-engine

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

如果先前将double初始化为零,那么将double比较为零是正确的吗?

我了解到比较双重使用==并不是明智的做法.但是我想知道检查双重是否已经初始化可能是危险的.例如,知道变量doubleVar如果已初始化则不能为零,这样做是否安全?

Foo::Foo(){
    doubleVar = 0.0;  // of type double
}

void Foo::Bar(){
    if(doubleVar == 0){ // has been initialized?
        //...
    }else{
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

c c++ floating-point

15
推荐指数
1
解决办法
2633
查看次数

复制抽象类的构造函数

我有一个名为的抽象类AClass.在同一个包我有AnotherClass,其中我有一个ArrayListAClass对象.在复制构造函数中,AnotherClass我需要复制AClass内部的对象ArrayList.

问题:

我无法创建一个复制构造函数,AClass因为它是一个抽象类,我不知道将继承的类的名称AClass.实际上,在这个项目中,没有对象会从这个类继承,但是这个项目将被其他项目用作库,这些项目将提供类的子类AClass.我的设计中是否有错误或是否有解决此问题的方法?

编辑:这是一些代码:

public class AnotherClass{
    private ArrayList<AClass> list;
...
    /** Copy constructor
    */
    public AnotherClass(AnotherClass another){
        // copy all fields from "another"
        this.list = new ArrayList<AClass>();
        for(int i = 0; i < another.list.size(); i++){
            // Option 1: this.list.add(new AClass(another.list.get(i)));
            // problem: cannot instantiate AClass as it is abstract
            // Option 2: this.list.add(another.list.get(i).someKindOfClone());
            // problem? I'm thinking about …
Run Code Online (Sandbox Code Playgroud)

java constructor abstract-class

12
推荐指数
1
解决办法
4003
查看次数

Const引用和左值

我们不能写,int& ref = 40因为我们需要lvalue在右侧.但我们可以写const int& ref = 40.为什么这可能?rvalue而是40lvalue

我知道这是一个例外,但为什么呢?

c++ rvalue lvalue

12
推荐指数
2
解决办法
4156
查看次数

strings.xml中的"未找到消息描述"警告

我收到了来自strings.xml的大量恼人的警告.在每个声明的左侧,我收到一条警告,上面写着"未找到消息说明".我该如何解决?

xml eclipse android

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

创建javadoc时出现FatalError(无法找到包java.lang)

我正在尝试在Linux下使用Eclipse Kepler在我的java项目中运行javadoc,但是我收到了这个错误:

Constructing Javadoc information...
com.sun.tools.javac.util.FatalError: Fatal Error: Unable to find package java.lang in classpath or bootclasspath
    at com.sun.tools.javac.comp.MemberEnter.importAll(MemberEnter.java:137)
    at com.sun.tools.javac.comp.MemberEnter.visitTopLevel(MemberEnter.java:521)
    at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:454)
    at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:400)
    at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:831)
    at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
    at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:782)
    at com.sun.tools.javac.comp.Enter.complete(Enter.java:481)
    at com.sun.tools.javac.comp.Enter.main(Enter.java:459)
    at com.sun.tools.javadoc.JavadocEnter.main(JavadocEnter.java:71)
    at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:180)
    at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:364)
    at com.sun.tools.javadoc.Start.begin(Start.java:162)
    at com.sun.tools.javadoc.Main.execute(Main.java:59)
    at com.sun.tools.javadoc.Main.main(Main.java:49)
javadoc: error - fatal error
1 error
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java eclipse javadoc

5
推荐指数
1
解决办法
5282
查看次数

如何设置JDK版本来编译JSP页面?

我在Eclipse Luna中做了一个GAE项目.一切正常,直到我添加了一个JSP页面.
现在,当我部署新版本时,无论是否调用JSP都没有问题,我得到以下异常:

java.lang.UnsupportedClassVersionError: org/apache/jsp/web/jsp/RecordExtraCost_jsp : Unsupported major.minor version 52.0
Run Code Online (Sandbox Code Playgroud)

读取Internet的原因是由于Java 8编译的代码在运行时在Java 7上运行.我检查了所有设置,一切看起来都很好.事实上,当我删除JSP文件并重新部署时,一切都会再次运行.

所以唯一的假设是eclipse使用JDK 8来编译JSP.那可能吗?如何在不从我的机器上删除JDK 8的情况下解决这个问题?

java eclipse google-app-engine jsp unsupported-class-version

5
推荐指数
1
解决办法
1307
查看次数