#include <iostream>
#include <fstream>
int main() {
std::fstream inf( "ex.txt", std::ios::in );
while( !inf.eof() ) {
std::cout << inf.get() << "\n";
}
inf.close();
inf.clear();
inf.open( "ex.txt", std::ios::in );
char c;
while( inf >> c ) {
std::cout << c << "\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我真的很困惑eof()功能.假设我的ex.txt的内容是:
abc
Run Code Online (Sandbox Code Playgroud)
它总是读取一个额外的字符,并-1在阅读时显示eof().但是inf >> c给出了'abc'的正确输出?任何人都可以帮我解释一下吗?
来自编码的 "签名类型" - 协议缓冲区 - Google代码:
ZigZag编码将有符号整数映射到无符号整数,因此具有较小绝对值(例如,-1)的数字也具有较小的varint编码值.它通过正负整数来回"zig-zags"的方式做到这一点,因此-1被编码为1,1被编码为2,-2被编码为3,依此类推,就像你一样可以在下表中看到:
Run Code Online (Sandbox Code Playgroud)Signed Original Encoded As 0 0 -1 1 1 2 -2 3 2147483647 4294967294 -2147483648 4294967295换句话说,使用编码每个值n
(n << 1) ^ (n >> 31)对于sint32s,或
(n << 1) ^ (n >> 63)对于64位版本.
如何(n << 1) ^ (n >> 31)什么表中的平等吗?我明白这对积极因素有用,但是这怎么说呢,-1?不会-1 1111 1111,(n << 1)是1111 1110吗?(在任何语言中形成的负片都有点转移吗?)
尽管如此,使用公式和做(-1 << 1) ^ (-1 >> 31),假设一个32位的int,我得到1111 1111,这是40亿,而表认为我应该有1.
所以我已经尝试在我的iPad应用程序的Info.plist中设置Supported Interface Orientations键以支持两种横向模式.然而,当我将iPad放入纵向时,我的屏幕会旋转.由于我的应用程序的设计方式,我只希望我的应用程序以横向模式显示自己,我该怎么做?
这是一个关于函数只做一件事的概念的问题.没有一些相关的上下文段落就没有意义,所以我在这里引用它们.它们出现在第37-38页:
换句话说,我们希望能够读取程序,好像它是一组TO段落,每个段落描述当前的抽象级别,并在下一级别引用后续的TO段落.
要包括设置和拆卸,我们包括设置,然后我们包括测试页面内容,然后我们包括拆卸.要包含设置,我们包括套件设置(如果这是套件),然后我们包括常规设置.
事实证明,程序员学习遵循这个规则并编写保持单一抽象级别的函数是非常困难的.但学习这个技巧也很重要.保持函数简洁并确保它们做"一件事"是关键.使代码读取像自上而下的TO段落是一种保持抽象级别一致的有效技术.
然后他给出了以下不良代码示例:
public Money calculatePay(Employee e)
throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
Run Code Online (Sandbox Code Playgroud)
并解释了它的问题如下:
这个功能有几个问题.首先,它很大,当添加新的员工类型时,它会增长.其次,它显然不止一件事.第三,它违反了单一责任原则7(SRP),因为改变的原因不止一个.第四,它违反了开放封闭原则8(OCP),因为每当添加新类型时它必须改变.
现在我的问题.
首先,我很清楚它是如何违反OCP的,而且我很清楚,仅凭这一点就会使它设计不佳.但是,我试图理解每个原则,而且我不清楚SRP是如何应用的.具体来说,我可以想象这个方法改变的唯一原因是增加了新的员工类型.只有一个"变革之轴".如果需要更改计算的详细信息,这只会影响像"calculateHourlyPay()"这样的子方法
此外,虽然在某种意义上它显然做了3件事,这三件事都处于同一抽象层次,并且都可以被放入TO段中,与例子1没有区别:为了计算员工的工资,我们计算委托员工委托工资,小时工资,小时工资等.因此,除了违反OCP之外,这段代码似乎符合Martin对清洁代码的其他要求,即使他认为它没有.
有人可以解释我错过了什么吗?
谢谢.
需要有关最低硬件要求的信息,以便更好地开发Android应用程序.
我目前的配置如下.P4 3.0 GHz,512 MB RAM.
在我的机器上开始使用Hello Android开发并且经验很慢,正在使用Eclipse Helios进行开发.模拟器过去需要花费大量时间才能启动.并运行程序.
我是否需要升级我的机器以用于开发目的,或者我的机器上是否还有其他任何东西(例如我可能安装的其他应用程序的重处理).
如果我确实需要升级,我是否也需要升级我的处理器(实际上是新机器,我不赞成),或只升级RAM就足够了.
是否可以使用Hibernate验证器API在带有注释的字段中存储经过验证的对象?例如,我想Email通过调用Java方法来验证地址,而不是@Email在Java bean属性上添加注释.
我想尝试使用HTML,CSS,JavaScript和适用于Windows的iPhone模拟器或转换器(如Appcelerator)制作iPhone应用程序.
我有一个朋友用XCode和iPhone,如果我得到一些工作.
这有用吗?
我应该期待什么样的问题?
我应该使用什么工具?
我在Android中遇到了一些奇怪的问题.我想获得一个特定用户的谷歌日历列表,但首先我需要让他们选择该帐户.
我在清单中包含了这一行:
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误:
12-26 03:26:31.004 13841 13841 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{....}: java.lang.SecurityException: caller uid 10105 lacks any of android.permission.GET_ACCOUNTS
Run Code Online (Sandbox Code Playgroud)
我曾试图与获得对无证日历API有类似的东西READ_CALENDAR和WRITE_CALENDAR,但我也有类似的例外(虽然可能出于不同的原因-我想这可能是值得一提的情况下,它是不是).
请告诉我我做错了什么!
谢谢!
我想创建一个MapView,但扩展MapActivity会抛出一个classNotFoundException:
/AndroidRuntime( 374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
E/AndroidRuntime( 374): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 374): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 374): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 374): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 374): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 374): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 374): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 374): Caused by: java.lang.ClassNotFoundException: com.androidcourse.phonemapper.view.MapShowActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.androidcourse.phonemapper-2.apk]
E/AndroidRuntime( 374): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime( 374): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime( 374): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime( 374): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime( 374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) …Run Code Online (Sandbox Code Playgroud) 有一个字段status enum('active', 'hidden', 'deleted')或status tinyint(3)查找表是否更好?假设状态一次只能占用一个值.
特别是,我有兴趣知道操作enum是否明显慢于操作或者操作速度快int?
android ×3
accounts ×1
bit-shift ×1
c++ ×1
enums ×1
eof ×1
google-maps ×1
hibernate ×1
ifstream ×1
ios4 ×1
ipad ×1
iphone ×1
java ×1
javascript ×1
mapactivity ×1
mysql ×1
permissions ×1