显然boost::asio::async_read不喜欢字符串,因为唯一的重载boost::asio::buffer允许我创建const_buffers,所以我坚持将所有内容都读成streambuf.
现在我想将streambuf的内容复制到一个字符串中,但它显然只支持写入char*(sgetn()),使用streambuf创建一个istream并使用getline().
有没有其他方法可以创建一个带有streambufs内容的字符串,而无需过多的复制?
我想用Qt编写一个C++应用程序,但是首先使用Python构建一个原型,然后逐渐用C++替换Python代码.
这是正确的方法,我应该使用哪些工具(绑定,绑定生成器,IDE)?
理想情况下,所有内容都应该在Ubuntu存储库中可用,因此我不必担心不兼容或旧版本,并且只需简单地设置所有内容即可aptitude install.
是否有关于此过程的全面文档,或者我是否必须学习每个组件,如果是,那么哪些组件?
现在我有多种选择:Qt Creator,因为很好的自动完成和Qt集成.
Eclipse,因为它支持C++和Python.埃里克(还没用过)Vim
PySide因为它正在使用CMake和Boost.Python,所以从理论上讲它会更容易替换python代码.PyQt因为它被更广泛地使用(更多支持)并且可以作为Debian包使用.
编辑:因为我必须将程序部署到各种计算机,C++ - 解决方案将需要1-5个文件(程序和一些库文件,如果我静态链接它),使用Python我必须构建PyQt/PySide/SIP /在每个平台上都有,并解释如何安装Python和其他所有东西.
在C++中.我可以将大多数事物声明为const,例如:
变量:const int i=5;
Scala有val i=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:
C++:
const int i[]={1,2,3,4};
i[2]=5; //errorRun Code Online (Sandbox Code Playgroud)
斯卡拉: val a=Array(1,2,3,4)
a(2)=5 //a is now Array(1, 2, 5, 4)
使用成员函数会更糟:
C++:
class Foo {
int i;
int iPlusFive() const {return i+5;}
int incrementI(){ return ++i; }
}
我可以肯定,调用iPlusFive不会改变对象,我不会在const对象上不小心调用incrementI.
当涉及到集合时,C++继续使用const集合的const-correct条纹:简单地将你的向量声明为const而你无法改变它.将a分配non-const vector<Int>给a const vector<Int>,编译器不会复制任何内容,并且会阻止您更改now const集合中的任何内容.
Scala有scala.collection.mutable.whatever和scala.collection.immutable.whatever,你不能只将可变集合转换为不可变集合,而且你仍然可以用非const成员函数更改收集的对象.
为什么scala,它有一个非常好的类型系统,没有任何可比的C++ const-keyword?
编辑:
Margus建议使用import scala.collection.mutable.我的解决方案是使用
import scala.collection.mutable.HashMap
import scala.collection.immutable.{HashMap => ConstHashMap}Run Code Online (Sandbox Code Playgroud)
这将使可变HashMap可用作HashMap和不可变的als ConstHashMap,但我仍然更喜欢C++方法. 可以定义指向成员的指针,并在以后使用它:
struct foo
{
int a;
int b[2];
};
int main()
{
foo bar;
int foo::* aptr=&foo::a;
bar.a=1;
std::cout << bar.*aptr << std::endl;
}
现在我需要一个指向数组特定元素的指针,所以通常我会写.
int foo::* bptr=&(foo::b[0]);
但是,编译器只是抱怨"invalid use of non-static data member 'foo::b'"是否可以这样做(或者至少没有工会)?
编辑:我需要一个指向数组特定元素的指针,因此int foo::* ptr指向数组的第二个元素(foo::b[1]).
还有另一个编辑:我需要访问数组中的元素bar.*ptr=2,因为指针在其他地方被使用,因此无法使用bar.*ptr[1]=2或调用它*ptr=2.
在Python中,我可以这样做:
lazy = ((i,j) for i in range(0,10000) for j in range(0,10000))
sum((1 for i in lazy))
Run Code Online (Sandbox Code Playgroud)
这需要一段时间,但内存使用是不变的.
scala中的相同构造:
(for(i<-0 to 10000; j<-i+1 to 10000) yield (i,j)).count((a:(Int,Int)) => true)Run Code Online (Sandbox Code Playgroud)
过了一会儿,我得到了一个java.lang.OutOfMemoryError,尽管应该懒得评价.
在PHP中优化函数时,我改变了
if(is_array($obj)) foreach($obj as $key=>$value { [snip] }
else if(is_object($obj)) foreach($obj as $key=>$value { [snip] } Run Code Online (Sandbox Code Playgroud)
至
if($obj == (array) $obj) foreach($obj as $key=>$value { [snip] }
else if($obj == (obj) $obj) foreach($obj as $key=>$value { [snip] } Run Code Online (Sandbox Code Playgroud)
在了解之后===,我改变了
if($obj === (array) $obj) foreach($obj as $key=>$value { [snip] }
else if($obj === (obj) $obj) foreach($obj as $key=>$value { [snip] } Run Code Online (Sandbox Code Playgroud)
将每个测试从is_*更改为cast,导致主要加速(> 30%).
我明白这===比==没有强制要求更快,但为什么变量比调用任何_* - 函数快得多?
编辑: 由于每个人都在询问正确性,我写了这个小测试:
$foo=(object) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小的Perl脚本,它依赖于一些可能的模块,因此在安装过程中我必须检查是否每个都有.我可以写use some::module,看看是否出现错误,但是像"你需要安装一些:: module"这样的短消息对于最终用户会更有帮助.
我也可以只搜索每个目录@INC,但是因为它是Perl,所以必须有一个更简单的方法.
我有一个未排序的列表,想要知道它中的所有项目是否都是唯一的.
我天真的做法是
val l = List(1,2,3,4,3)
def isUniqueList(l: List[Int]) = (new HashSet()++l).size == l.size
基本上,我正在检查包含列表中所有元素的Set是否具有相同的大小(因为在原始列表中出现两次的项目只会在集合中出现一次),但我不确定这是否是理想的解决方案对于这个问题.
编辑:
我的基准3个最流行的解决方案,l==l.distinct,l.size==l.distinct.size和阿列克谢的基于HashSet的解决方案.每个函数运行1000次,包含10个项目的唯一列表,10000个项目的唯一列表以及第三个季度中出现的一个项目复制到列表中间的相同列表.在每次运行之前,每个函数都被调用1000次来预热JIT,整个基准测试在使用System.currentTimeMillis之前运行了5次.这台机器是C2D P8400(2.26 GHz),内存为3GB,java版本是OpenJDK 64位服务器VM(1.6.0.20).java args是-Xmx1536M -Xms512M
结果:
l.size==l.distinct.size (3, 5471, 2, 6492) l==l.distinct (3, 5601, 2, 6054) Alexey's HashSet (2, 1590, 3, 781)
较大对象的结果(字符串从1KB到5KB):
l.size==l.distinct.size MutableList(4, 5566, 7, 6506) l==l.distinct MutableList(4, 5926, 3, 6075) Alexey's HashSet MutableList(2, 2341, 3, 784)
使用HashSets的解决方案肯定是最快的,正如他已经指出的使用.size并没有产生重大影响.
R,Python,Scala等都带有REPL环境,我不想错过,但是,大多数时候编辑它们的文本很糟糕,所以我在vim中编辑代码,粘贴它并查看输出并再次编辑vim中的代码.
我可以运行当前文件,!python %我可以用更多的vim魔法运行当前行,但是,这将启动解释器的新进程.
是否可以启动REPL并向正在运行的REPL发送代码行(显然可以得到结果)?
在django应用程序中,我有以下模型:
class Appointment(models.Model):
#some other fields
#address fields
zipcode=models.CharField(max_length=5)
address=models.CharField(max_length=120)
latitude=models.FloatField()
longitude=models.FloatField()
Run Code Online (Sandbox Code Playgroud)
当我渲染一个约会时,我只是将一个标记放在经度和纬度指定的位置,地址为文本,但是我需要经度和经度才能做到这一点.
目前,必须在管理员后端手动输入纬度和经度,但打开谷歌地图/ OSM,搜索地址并输入纬度和经度是不必手动完成的工作,所以我想要检索它通过Google Maps API(关键字地理编码).
理想情况下,我希望地址旁边有一个"获取坐标"按钮,当按下该按钮时,会启动地理编码请求,并在地址明确时填充纬度和经度,并在用户显示结果并填充坐标时填充地图点击右侧标记.
我知道该怎么做,但我不确定如何将标记和代码插入管理员后端.
我已经考虑过但不想做的一些事情,因为它们看起来并不自然,或者看起来对于这么简单的任务似乎太多了:
field_options,从一个派生自的类中admin.ModelAdminform(使用单独的模板)