在std :: string中,只有const成员来获取数据,如c_str().但是我可以获得对字符串via的第一个元素的引用operator[],我可以写入它.
例如,如果我有功能:
void toupper(char *first,char *last_plus_one);
Run Code Online (Sandbox Code Playgroud)
我可以直接写向量获取指向第一个元素的指针:
vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());
Run Code Online (Sandbox Code Playgroud)
我可以用std :: string做同样的事情吗?
string message="Some Message";
toupper(&message[0],&message[0]+message.size());
Run Code Online (Sandbox Code Playgroud)
标准是否保证内存的位置实际上是线性的?即:
&(*(message.begin()+n)) == &message[n]
Run Code Online (Sandbox Code Playgroud)
谢谢.
我为Cocoa的内置类使用了一组类别方法,使我的生活更轻松.我将发布一些例子,但我真的想看看其他编码员提出了什么.你使用什么样的方便类别方法?
示例#1:
@implementation NSColor (MyCategories)
+ (NSColor *)colorWithCode:(long)code
{
return [NSColor colorWithCalibratedRed:((code & 0xFF000000) >> 24) / 255.0
green:((code & 0x00FF0000) >> 16) / 255.0
blue:((code & 0x0000FF00) >> 8) / 255.0
alpha:((code & 0x000000FF) ) / 255.0];
}
@end
// usage:
NSColor * someColor = [NSColor colorWithCode:0xABCDEFFF];
Run Code Online (Sandbox Code Playgroud)
示例#2:
@implementation NSView (MyCategories)
- (id)addNewSubViewOfType:(Class)viewType inFrame:(NSRect)frame
{
id newView = [[viewType alloc] initWithFrame:frame];
[self addSubview:newView];
return [newView autorelease];
}
@end
// usage:
NSButton * myButton = [someView addNewSubviewOfType:[NSButton class] …Run Code Online (Sandbox Code Playgroud) 我知道有关Objective-C类别的一些规则:
- 类别方法不应覆盖现有方法(类或实例)
- 对同一个类实现相同方法的两个不同类别将导致未定义的行为
我想知道当我覆盖同一类别中我自己的一个类别方法时会发生什么.例如:
@interface NSView (MyExtensions)
- (void)foo; // NSView category implementation
@end
@interface MyClass : NSView
{ }
@end
@interface MyClass (MyExtensions)
- (void)foo; // MyClass category implementation
@end
Run Code Online (Sandbox Code Playgroud)
定义了这些接口后,当我运行以下代码时将执行哪个方法?
MyClass * instance = [[MyClass alloc] initWith...];
[instance foo];
[instance release];
Run Code Online (Sandbox Code Playgroud)
注意:使用我的编译器,MyClass实现优先,但我不确定是否可以保证发生,或者只是一种特定的未定义行为.
我有一个程序,我希望能够在磁盘上存储某些数据(动态分配的块),以减少内存使用和持久性.
我的第一个想法是编写我自己的自定义分配器来管理磁盘上的文件内容,但我想看看有什么替代品.
我已经研究了自定义内存分配器和关于对象序列化的主题,但在将这些原则用于管理文件的地址空间时,存在细微差别,包括好的和坏的.
在这种情况下:
仅通过IO(读/写)功能而不是直接访问存储器
没有存储对象(方法/指针),只存储数据.
文件的大小不是静态的,因此它应该在需要时增长,而不是大而静态
对于我的用途,可以在碎片整理后重新映射现有指针
由于数据不是固定大小,因此大多数数据库实现似乎都不太适合.
我问,这个问题的最佳方法是什么?我应该实现一个简单的内存分配器,将文件视为堆吗?
作为参考,我在嵌入式设备上使用C++.
编辑:我已经实现了自己的内存管理器,它使用伙伴内存分配和块大小为2的权限.我很满意它是正确的,不泄漏,合并自由块,并可以做一个'停止世界'碎片整理.
问题是,正如预期的那样,存在相当多的内部和外部碎片.我不是这个领域的专家,虽然我发现它很迷人(我还是学生),但我想知道是否还有其他任何实现相同或类似的东西?当然我不能是唯一的一个?
一些有用但迄今为止不兼容的主题是:
mmap tbh我没有使用过mmap但是,它解决了文件IO,但没有解决文件地址空间的管理问题.
BOOST:序列化我现在有一种(可能是不合理的)不愿意使用boost库.
STXXL有趣但不解决可变大小的内存分配问题
Doug Lea Memory Allocator对内存分配器的问题有很好的见解,但是我无法尝试自己实现
我试图将图像设置为自定义UIButton的背景.我能够在界面构建器中为"圆角矩形"UIButton设置背景图像,但现在边框已经消失.有没有办法保留边界?此外,我想使边框显示矩形而不是圆角.
我为我的Cocoa App设置了一个自定义图标文件(MyApp.icns).如何NSImage从我的应用程序中访问图标的表示?
像下面这样的东西是完美的:
NSImage * iconImage = [MyApplication defaultIconAsImage];
Run Code Online (Sandbox Code Playgroud)
但我确信这不是那么容易:)
当然,我可以获得图标文件的路径,如下所示:
NSString * iconPath = [[NSBundle mainBundle]
pathForResource:@"MyApp" ofType:@"icns"];
Run Code Online (Sandbox Code Playgroud)
但在我看来,应该有某种标准方式来访问应用程序的图标文件,而不是通过名称调用它,因为名称可能会改变.
这样做的正确方法是什么?
我有一个包含120万条文本记录的csv文件.字母数字字段用引号括起来,日期/时间或数字字段不是.
例如"Fred","Smith",01/07/1967,2,"7,The High Street","Anytown","Anycounty","LS1 7AA"
我想做的是在Excel中编写一些VBA(或多或少是我可以使用的唯一可用的工具),它通过记录读取CSV记录,执行检查(如同在最后一个字段中发生的那样,邮政编码)然后将1.2m记录的一小部分输出到新的输出文件.
我理解如何打开这两个文件,读取记录,做我需要做的数据并写出来(我只输出带有前缀表示异常类型的输入记录)
我不知道的是如何正确解析VBA中的CSV.我无法进行简单的文本扫描并搜索逗号,因为文本有时会有逗号(因此文本字段为文本分隔的原因)
是否有一个很棒的命令可以让我从记录中的第n个字段快速获取数据?
我想要的是s_work = field(s_input_record,5)其中5是我的CSV中的字段编号....
非常感谢,C
快速版:
如果我拥有的唯一信息是每个上升沿出现的时间,我可以用什么算法来确定两个不同频率的方波信号之间的"相位差" ?
详细版本:
我正在开发一个嵌入式软件项目,我遇到了一个有趣的问题.我从两个霍尔效应速度传感器收集数据,每个传感器都针对两个啮合齿轮中的一个,如下图所示:
啮合齿轮和脉冲信号http://img291.imageshack.us/img291/4905/gears.png
注意:
正如Jaime指出的那样,该图中的信号实际上具有相同的频率.真正的硬件具有两个靶的齿轮,其中的一些是由轴代替啮合齿连接在几个传动级,因此我做有两个方波具有不同频率的结束,和它们之间的比率仍然是一个常数.我想简化图表来解决问题,但看起来我简化了太多了!
/注意
速度传感器输出方波信号,其频率与每个齿轮的转速成正比.当单个齿轮齿的前(和后)边缘经过传感器时,出现方波的上升(和下降)边缘.
我知道每个齿轮上有多少齿,根据这些信息,我能够根据方波信号的频率精确测量每个齿轮的转速.
为了测量频率,我将每个速度传感器信号连接到嵌入式控制器上的高速捕获定时器引脚.捕获定时器自动检测方波信号的上升沿,加载一个寄存器,其值表示转换发生的时间,并触发中断.每个信号的捕获点在图中以黄色显示.中断服务程序看起来像这样:
struct
{
long previousTime;
int frequency;
}
sensors[2];
void CaptureTimer_Interrupt(int channel, long transitionTime)
{
long timeDifference = transitionTime - sensors[channel].previousTime;
sensors[channel].frequency = CONVERSION_FACTOR / timeDifference;
sensors[channel].previousTime = transitionTime;
}
Run Code Online (Sandbox Code Playgroud)
我想做什么:
我希望能够检测出这两个方波信号的相对时序的微小差异.由于缺乏更好的术语,我称之为"相位差".如果两个信号具有完全相同的频率,则这将是直截了当的,并且相位差将是正确的术语.
这就是我所得到的:如果我要在很长一段时间内记录这两个信号,然后人为地减慢(或"伸展")高速(蓝色)信号16/9,它将具有与低速(红色)信号完全相同的频率,并且这两个信号将具有一些可测量的相位差,即红色信号中断和蓝色信号中断之间的时间差.我想计算相同的时间差(或等价的东西),而不必长时间记录信号.嵌入式控制器的资源有限,因此不能存储过去转换时间的大型数组.
有没有人遇到过这个?实际项目有几个这样的齿轮和传感器安排,所以我正在寻找一个优雅的算法,我可以重用.提前致谢!
我有一个简单的cocoa用户界面,其中包含项目列表和搜索字段,分别使用NSTableView和NSSearchField实现.数据源和所有绑定都已设置好并且运行良好.我在列表中看到了我的数据,我可以通过在搜索字段中输入字符串来搜索它.当我输入更多文本时,列表中的项目数量会变得越来越小,最终会缩减为我正在搜索的项目.
现在,如何清除搜索字段中的文本并强制列表恢复正常?我可以通过手动清除文本(使用键盘)来实现这一点,但是当我尝试以编程方式执行此操作时,列表中的隐藏项目不会返回.
我正在使用这个:
[searchField setStringValue:@""];
Run Code Online (Sandbox Code Playgroud)
清除搜索字段中的文本,但不会重置列表.
有任何想法吗?是否有一个简单的[searchField reset]方法,我在文档中找不到?
如何缩小图像中使用的图像UISegmentedControl?我正在以编程方式创建分段控件:
UISegmentedControl * segmentButton;
segmentButton = [UISegmentedControl segmentedControlWithItems:
[NSArray arrayWithObjects:
[UIImage imageNamed:@"option_one.png"],
[UIImage imageNamed:@"option_two.png"],
nil]];
segmentButton.contentMode = UIViewContentModeScaleToFill;
segmentButton.frame = CGRectMake(10, 10, 200, 32);
[view addSubview:segmentButton];
Run Code Online (Sandbox Code Playgroud)
结果不是我所期望的.原始的.png图像高约100像素,并且它们没有按比例缩小以适合分段控件的32像素高度.这导致分段控制被绘制成与其重叠的巨大图像:

如何告诉控件缩小这些图像?