我正在使用带std::string钥匙的地图,虽然一切正常,但我没有达到预期的性能.我搜索了一些地方来优化和改进一些东西,当一位同事说,"那个字符串键会变慢."
我读了几十个问题,他们一直说:
"不要使用
char *键作为键"
"std::string键永远不是你的瓶颈"
"achar *和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) 我刚刚阅读了这篇博客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) 我正面临着日食[Ganymede]的奇怪问题.一旦我在我的代码中添加了一些断点,现在甚至在我删除所有这些断点之后,当我开始日食时它再次出现.
因此,定期首先要做的是在启动eclipse后我必须做的事情是手动删除所有断点以开始工作.可能eclipse会将有关这些断点的信息存储在某个文件中,我想,如果我删除该文件,我的问题可能会得到解决.如果您有解决方案,请告诉我.
我创建了以下结构:
??? 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) 我了解到比较双重使用==并不是明智的做法.但是我想知道检查双重是否已经初始化可能是危险的.例如,知道变量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) 我有一个名为的抽象类AClass.在同一个包我有AnotherClass,其中我有一个ArrayList的AClass对象.在复制构造函数中,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) 我们不能写,int& ref = 40因为我们需要lvalue在右侧.但我们可以写const int& ref = 40.为什么这可能?rvalue而是40lvalue
我知道这是一个例外,但为什么呢?
我收到了来自strings.xml的大量恼人的警告.在每个声明的左侧,我收到一条警告,上面写着"未找到消息说明".我该如何解决?
我正在尝试在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)
我究竟做错了什么?
我在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
c++ ×4
eclipse ×4
java ×3
android ×1
breakpoints ×1
c ×1
c# ×1
c++11 ×1
constructor ×1
dictionary ×1
javadoc ×1
jsp ×1
lvalue ×1
performance ×1
rvalue ×1
stdmap ×1
stl ×1
unit-testing ×1
vector ×1
xml ×1