我有一个项目,我需要读/写大文件.
我决定使用ifstream :: read()将这些文件一次性传递到内存中,放入std :: string.(这似乎是做C++中的最快方法:http://insanecoding.blogspot.com/2011/11/how-to-read-in-file-in-c.html和 HTTP:// insanecoding. blogspot.com/2011/11/reading-in-entire-file-at-once-in-c.html)
当在文件之间切换时,我需要"重置"用作前一个内存缓冲区的std :: string(即擦除char []缓冲区以释放内存)
我试过了 :
std::string::clear()
std::string::assign("")
std::string::erase(0, std::string::npos)
std::string::resize(0)
std::string::reserve(0)
Run Code Online (Sandbox Code Playgroud)
但是,在Visual Studio 2008下,这并没有释放std :: string本身内部使用的内存:它的底层缓冲区没有被解除分配.
我发现删除它的唯一方法是调用std :: string :: swap(std :: string(""))强制更改实际std :: string和param中的空缓冲区之间的内部缓冲区.
我觉得这个行为有点奇怪......
我只在Visual Studio 2008上测试过,我不知道它是否是STL标准行为,或者它是否是MSVC特有的.
你能告诉我一些线索吗?
我无法弄清楚如何使用其他方法来定义常量这样的简单事情.
例如,一个虚拟的例子:
classdef DummyClass < handle
properties (Constant)
NB_SECONDS_IN_MINUTE = 60;
NB_MINUTES_IN_HOUR = 60;
NB_SECONDS_IN_HOUR = NB_SECONDS_IN_MINUTE * NB_MINUTES_IN_HOUR;
end
end
Run Code Online (Sandbox Code Playgroud)
这不起作用:(
然后我尝试了这一行:
NB_SECONDS_IN_HOUR = DummyClass.NB_SECONDS_IN_MINUTE * DummyClass.NB_MINUTES_IN_HOUR;
Run Code Online (Sandbox Code Playgroud)
但那也不起作用......
有人在这里得到了一个线索?:/
(我正在使用MATLAB R2009a btw)
我有一个Excel/VBA宏,它列出了目录中的文件.
文件名格式为:yyyy-MM-dd @hh-mm-ss_ [description] .csv
例如 : 2013-07-03@22-43-19_my-file.csv
然后我需要将文件名的第一部分放入Excel Date对象(包括时间戳)
我找到了CDate()函数,但它没有采用任何"format"参数,并且Format()函数的工作方式错误,即将String转换为Date.
我想获取一个带有String和格式的函数,并返回一个Excel Date/Time对象.
有没有专门设计的功能?
谢谢,
我在Excel VBA中遇到"编译"错误,我不明白......
我有一个这样的方法:
Public Sub SomeMethod(ByRef argument As SomeClass)
... <- 'argument' must be called ByRef because I have to modify it
End Sub
Run Code Online (Sandbox Code Playgroud)
如果我定义一个变量,如:
Dim var As SomeClass
Run Code Online (Sandbox Code Playgroud)
没问题,我可以打电话:
SomeMethod var
Run Code Online (Sandbox Code Playgroud)
它正在发挥作用.
但是,如果我定义一个Variant变量,如:
Dim var as Variant
Set var = New SomeClass
Run Code Online (Sandbox Code Playgroud)
它不起作用.
如果我打电话:
SomeMethod var
Run Code Online (Sandbox Code Playgroud)
VB弹出一条消息:'ByRef参数类型不匹配'
如果我打电话:
SomeMethod (var)
Run Code Online (Sandbox Code Playgroud)
它"编译",但var然后传递ByVar它给了我一个运行时错误消息:'对象不支持此属性或方法'
所以我基本上只想告诉VBA我的Variant变量'var'实际上是'SomeClass'对象(在调试器中,VBA这样说),但我不知道怎么做...
有人可以帮帮我吗?
我有一个问题,我无法摆脱.
你知道,我对使用JTables相当新,所以答案可能很简单,但我找不到解决方案:/
所以,我有一个使用AbstractTableModel的JTable,它覆盖了
public Class<?> getColumnClass(int columnIndex_p)
Run Code Online (Sandbox Code Playgroud)
方法,告诉要显示的每列的类型.其中一个是布尔值.
当我创建一个简单的JTable时,使用
table_l = new JTable(new MyTableModel());
Run Code Online (Sandbox Code Playgroud)
一切都很好,并使用复选框(开/关)正确显示布尔值.
现在,我想将文本集中在每个单元格上(以后可能会有更多选项).
所以我为每一列定义了一个新的DefaultTableCellRenderer,如下所示:
DefaultTableCellRenderer cellRenderer_l = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// delegate the rendering part to the default renderer (am i right ???)
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
return comp;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我只需将此CellRender的水平对齐设置为:
cellRenderer_l.setHorizontalAlignment(JLabel.CENTER);
Run Code Online (Sandbox Code Playgroud)
然后我在JTable的每一列上安装这个新的CellRenderer:
for (int i = 0; i < table_l.getColumnCount(); ++i) {
table_l.getColumnModel().getColumn(i).setCellRenderer(cellRenderer_l);
}
Run Code Online (Sandbox Code Playgroud)
但是,使用新的CellRenderer,显示的JTable不再使用我的TableModel的getColumnClass()方法,因此只在布尔值上显示"true/false"字符串. …