在Stroustrup的The C++ Programming Language:Special Edition(3rd Ed)中,Stroustrup写道,控制语句条件中的变量声明和初始化不仅是允许的,而且是鼓励的.他写道,他鼓励它,因为它将变量的范围缩小到只有它们所需的范围.所以像这样......
if ((int i = read(socket)) < 0) {
// handle error
}
else if (i > 0) {
// handle input
}
else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
...是很好的编程风格和实践.该变量i仅存if在于需要它的语句块中,然后超出范围.
但是,g ++(版本4.3.3 Ubuntu特定编译)似乎不支持编程语言的这个特性,这对我来说是令人惊讶的.也许我只是用一个标志来调用g ++来关闭它(我称之为的标志是-g和-Wall).在使用这些标志进行编译时,我的g ++版本返回以下编译错误:
socket.cpp:130: error: expected primary-expression before ‘int’
socket.cpp:130: error: expected `)' before ‘int’
Run Code Online (Sandbox Code Playgroud)
在进一步的研究中,我发现我似乎并不是唯一一个不支持此编译器的编译器.并且在这个问题中似乎存在一些混淆,因为确切地说语言在语言中是什么标准,以及编译器使用它编译什么.
所以问题是,什么编译器支持这个功能以及需要设置哪些标志才能编译?这是某个标准而不是其他标准的问题吗?
另外,出于好奇,人们普遍认同Stroustrup这是好风格吗?或者这是一种语言的创造者在他脑海中获得一个想法的情况,这个想法不一定得到语言社区的支持?
嘿,我正在制作一个电子商店并显示类别树和所有产品的价格,我mysql_query("SELECT ...");在一个页面上提供超过150个查询的多种价格变化.(如果算上"while"循环).
它是否太多,如果是,它会产生任何负面影响吗?(ofc.加载数据需要更长的时间..)
我也可以无论如何实现这个代码的效果吗?
$result2 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result3 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result4 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
$result5 = mysql_query("SELECT * FROM ceny WHERE produkt_id='$id' ORDER BY gramaz");
while( $row2 = mysql_fetch_array( $result2 )) { }
while( $row3 = mysql_fetch_array( $result2 )) { }
while( $row4 = mysql_fetch_array( $result2 )) { }
while( $row5 = mysql_fetch_array( $result2 )) …Run Code Online (Sandbox Code Playgroud) 我在一个存储大约15-100K数据的类中使用了SortedList().
最近我的要求发生了变化,数据不应再存储为已排序,所以我切换到了List().
但是在这种情况下,我注意到List()消耗大约20%以上的内存.
9K物品:
15K物品:
在我开发的环境中,记忆非常重要.而不是List()我可以使用什么来避免这种额外的内存消耗,仍然有一个非排序列表?
PS我使用HashSet(Of String)来提供唯一性检查,同时使用List(Of)来模拟SortedList.ContainsKey(),尽管我认为它不会带来这样的内存开销.
PS 2:我的应用程序在启动时有大约80 MB的基本内存分配.因此数字应为105-80 = 25,125-80 = 45,依此类推
结果
感谢所有答案,最终结果如下:
一些Bencmarks: 500个字符,250000个插入
名单(OF STring)(50000)
274毫秒 - 226 MB
SortedList(Of String,String)(50000)
34868毫秒 - 230 Mb
HashSet的
420毫秒 - 232 MB
字典(OF String,Object)
486毫秒 - 234 MB
虽然当我将减少的数量改为25时,然后:
Hashset为600.000次迭代300 Mb,其中List()为286 Mb
另外的Hashset左右的内存使用情况:http://blog.mischel.com/2008/04/09/hashset-limitations/词典(字符串,对象)是在我的测试没有太大的孰优孰劣.
当我读到这个问题的litb回答时,我了解到通过引用传递数组允许我们获得它的大小.我只是玩了一点代码,并尝试通过引用传递一个"函数",并且令人惊讶地(至少对我来说),这段代码编译:
void execute( void (&func)() ) // func is passed by reference!
{
func();
}
Run Code Online (Sandbox Code Playgroud)
最后一个函数和这个函数之间有什么区别:
void execute( void (*func)() ) // func is passed by pointer!
{
func();
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用VC2008,它在每种情况下产生不同的输出.奇怪的是,在函数指针的情况下,编译器会更好地优化代码:
void print()
{
std::cout << "Hello References!";
}
void execute( void (&func)() ) // optimized
{
func();
}
int main()
{
00291020 call print (291000h)
}
=========================================
// In this case, the compiler removes all function calls in the code!
void print() // optimized!
{
std::cout << …Run Code Online (Sandbox Code Playgroud) 我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.
我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.
工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.
在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.
现在这里是棘手的部分:
我对一般数据库设计和使用哪些技术有一些疑问.
最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.
我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.
就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?
PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.
感谢您的输入!
@timdev:
要删除表中的所有行,我目前正在执行以下操作:
context.Entities.DeleteAllOnSubmit(context.Entities);
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
然而,这似乎需要很长时间.有更快的方法吗?
我有一个问题与jquery UI中的选项卡大小,他们是巨大的..我改变了一点css但但无法找到propper id/class来修复它.. :(
替代文字http://clip2net.com/clip/m11962/1254678300-clip-6kb.png
和标签内的文字aslo改变大小:S一如既往,任何改变表示赞赏谢谢!
#include<stdio.h>
#include "amicablenumber.h"
int i,j;
struct amicable
{
int **amicablePair;
int size;
};
main()
{
int startnum = 250;
int endnum = 1000;
struct amicable* ami;
ami = getAmicablePairs(startnum, endnum);
printf("{");
for(int i = 0; i<ami->size; i++)
{
printf("{%d, %d}",ami->amicablePair[i][0], ami->amicablePair[i][1]);
}
printf("}");
}
amicable *getAmicablePairs(int startnum,int endnum)
{
int size=0;
int sumfactors(int);
amicable record;
for(i=startnum;i<=endnum;i++)
{
for(j=endnum;j>=startnum;j--)
{
if((sumfactors(i)==j)&&(sumfactors(j)==i) && (i!=j))
{
record.amicablePair[size][0]=i;
record.amicablePair[size][1]=j;
size++;
}}}
record.size=size;
return record;
}
int sumfactors(int number)
{
int sum=0;
for(i=1;i<number;i++)
{
if(number%i==0) …Run Code Online (Sandbox Code Playgroud) 我有一个小应用程序,可用于设置未来事件的提醒.该应用程序使用AlarmManager来设置提醒用户的时间.当警报响起时,BroadcastReceiver会对此进行注册,然后启动服务以通过状态栏中的Toast和通知通知用户.
为了在通知和吐司中显示正确的信息,一些额外的信息与意图一起传递.第一次注册提醒时,BroadcastReceiver收到并传递给服务的信息是正确的.但是对于每个后续提醒(即BroadcastReceiver接收的每个新意图),即使发送的信息不同,该信息也保持不变.
例如,如果字符串"foo"作为第一个意图的附加项放置,则广播接收器正确提取"foo".如果在第二个意图中将"bar"作为附加项放置,则广播接收器仍然会提取"foo".
这是注册警报并传递意图的代码(主要的ui-class):
Intent intent = new Intent(ACTION_SET_ALARM);
intent.putExtra("desc", desc);
intent.putExtra("time", time);
intent.putExtra("dbId", dbId);
intent.putExtra("millis", millis);
PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, millis, pIntent);
Run Code Online (Sandbox Code Playgroud)
BroadcastReceiver类中的onReceive()方法:
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AlertService.class);
String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc");
String time = intent.getStringExtra("time");
long dbId = intent.getLongExtra("dbId", -1);
long millis = intent.getLongExtra("millis", -1);
i.putExtra("desc", desc);
i.putExtra("time", time);
i.putExtra("dbId", …Run Code Online (Sandbox Code Playgroud) 那里的任何人都知道如何改进这个功能?我并不担心缩短代码,我相信这可以通过更好的正则表达式完成,我更关心正确的逻辑.我很难找到SSN#的文档.我在下面使用的大多数规则来自在信用行业工作的其他程序员(没有引用的来源).
感谢您的任何见解!
public static bool isSSN(string ssn)
{
Regex rxBadSSN = new Regex(@"(\d)\1\1\1\1\1\1\1\1");
//Must be 9 bytes
if(ssn.Trim().Length != 9)
return false;
//Must be numeric
if(!isNumeric(ssn))
return false;
//Must be less than 772999999
if( (Int32)Double.Parse(ssn.Substring(0,3)) > 772 )
{
//Check for Green Card Temp SSN holders
// Could be 900700000
// 900800000
if(ssn.Substring(0,1) != "9")
return false;
if(ssn.Substring(3,1) != "7" && ssn.Substring(3,1) != "8")
return false;
}
//Obviously Fake!
if(ssn == "123456789")
return false;
//Try again!
if(ssn …Run Code Online (Sandbox Code Playgroud) c# ×2
c++ ×2
php ×2
pointers ×2
.net ×1
algorithm ×1
android ×1
c ×1
collections ×1
conditional ×1
couchdb ×1
declaration ×1
delete-row ×1
distributed ×1
function ×1
jquery ×1
jquery-ui ×1
linq-to-sql ×1
memory ×1
mysql ×1
performance ×1
reference ×1
select ×1
sqlite ×1
structure ×1
tabs ×1
validation ×1