你使用LINQ to Objects优化技术或者你在野外看到了什么?
在等待"产生foreach"和其他语言/编译器优化到201x中的C#时,我很有意思尽一切可能使LINQ在任何地方使用,而不是性能上的痛苦.
到目前为止,我看到的一种模式是为特定的组合器创建自定义的IEnumerable实现,这样可以多次重新枚举枚举.
在洛基库实现了一些使用非常广泛的概念(智能指针,访客,工厂等).经常提到相关的书"现代C++设计",但图书馆本身并没有被广泛使用.这是为什么?
大多数开发人员似乎更喜欢Boost.特别是,为什么人们经常决定使用Boost的智能指针而不是Loki?
Visual Studio C++ 2008/GCC 4.4.2
我已经编写了一个在Linux上运行的程序,现在我必须将我的代码移植到Windows上运行.我决定使用CMake,因为我想为两个平台保持相同的构建系统.
但是,我需要链接两个平台的一些库.在我的CMakeLists.txt中,我有以下内容:
# Compile with gcc c89 standard
IF(CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(STATUS "GCC detected - Adding compiler flags")
SET(CMAKE_C_FLAGS "-pthread -ggdb -Wextra -Wall -pedantic -std=c89")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
IF(WIN32)
SET(CMAKE_C_FLAGS "ws2_32.lib")
ENDIF(WIN32)
Run Code Online (Sandbox Code Playgroud)
但是,当我在Visual Studio上编译时,我收到以下错误:
fatal error C1083: Cannot open source file: 'ws2_32.lib': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
=========编辑在顶级目录中
# Project Client Server
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# Name of project
PROJECT(CLIENT_SERVER)
# Compile with gcc c89 standard
IF(CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(STATUS "GCC detected - Adding compiler flags")
SET(CMAKE_C_FLAGS "-pthread -ggdb …Run Code Online (Sandbox Code Playgroud) 当我使用IN从表中选择一组行时,例如
SELECT x.y, x.z FROM x WHERE x.id IN (23, 55, 44, 12)
Run Code Online (Sandbox Code Playgroud)
是否有一个SQL技巧让它们按照IN集中给出的顺序返回?
因此,在该示例中,假设x具有带有ID,55,54和12的行,则将按该顺序返回这四行.
我正在尝试通过json_decode()解析时处理错误的json数据.我正在使用以下脚本:
if(!json_decode($_POST)) {
echo "bad json data!";
exit;
}
Run Code Online (Sandbox Code Playgroud)
如果$ _POST等于:
'{ bar: "baz" }'
Run Code Online (Sandbox Code Playgroud)
然后json_decode处理错误并且吐出"坏的json数据!"; 但是,如果我将$ _POST设置为"无效数据"之类的东西,它会给我:
Warning: json_decode() expects parameter 1 to be string, array given in C:\server\www\myserver.dev\public_html\rivrUI\public_home\index.php on line 6
bad json data!
Run Code Online (Sandbox Code Playgroud)
我是否需要编写自定义脚本来检测有效的json数据,还是有其他一些很好的方法来检测它?
我正在Linux(GCC 4.4.2)和Windows VS C++ Express Edition 2008下编译
我目前正在Windows XP Pro 32位下编译,并已将其添加到我的源代码中.
#if defined( WIN32 )
/* Do windows stuff here */
#endif
Run Code Online (Sandbox Code Playgroud)
但是,if语句中的代码被禁用(变灰).但是,如果我执行以下操作:
#if defined( _MSC_VER )
/* Do windows stuff here */
#endif
Run Code Online (Sandbox Code Playgroud)
if语句代码已启用.
我只是想知道,我应该使用什么.我见过很多程序员都使用WIN32.但是,似乎对我不起作用.我应该使用_MSC_VER吗?
非常感谢任何建议,
出于某种原因,我应该使用gcc编译一个C文件,然后链接Visual C++ 2008项目.
(我使用了当前最新的gcc版本:cygwin gcc 4.3.4 20090804.)
但是有一个问题:gcc总是用_alloca分配一个大数组,
和VC链接器无法解析符号__alloca.
例如,
int func()
{
int big[10240];
....
}
Run Code Online (Sandbox Code Playgroud)
虽然我没有明确地调用_alloca函数,但此代码会产生_alloca依赖关系.
(数组大小很重要.如果我改变10240 - > 128,一切都好)
我尝试了gcc选项-fno-builtin-alloca或-fno-builtin,但没有运气.
有可能让gcc不使用_alloca吗?(或调整门槛?)
我目前使用线性探测器的实现是使用线性探测,现在我想转向二次探测(以后再进行链接,也可能是双重哈希).我已经阅读了一些文章,教程,维基百科等...但我仍然不知道我应该做什么.
基本上,线性探测的步长为1,这很容易做到.当从哈希表中搜索,插入或删除元素时,我需要计算哈希值,为此我执行此操作:
index = hash_function(key) % table_size;
Run Code Online (Sandbox Code Playgroud)
然后,在搜索,插入或删除I循环通过表时,直到找到一个空闲桶,如下所示:
do {
if(/* CHECK IF IT'S THE ELEMENT WE WANT */) {
// FOUND ELEMENT
return;
} else {
index = (index + 1) % table_size;
}
while(/* LOOP UNTIL IT'S NECESSARY */);
Run Code Online (Sandbox Code Playgroud)
对于二次探测,我认为我需要做的是改变计算"索引"步长的方式,但这是我不明白应该怎么做的.我见过各种代码,而且所有代码都有所不同.
此外,我已经看到了一些Quadratic Probing的实现,其中哈希函数被改变为适应(但不是全部).是真的需要改变还是我可以避免修改散列函数并仍然使用二次探测?
编辑: 在阅读了以下Eli Bendersky指出的所有内容后,我想我得到了一般的想法.以下是http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_hashtable.aspx中代码的一部分:
15 for ( step = 1; table->table[h] != EMPTY; step++ ) {
16 if ( compare ( key, table->table[h] ) == 0 )
17 return 1;
18
19 /* Move forward …Run Code Online (Sandbox Code Playgroud) 我使用以下代码为WinForm应用程序分配控制台.控制台窗口成功显示,输出就在那里.但是当我关闭控制台窗口时,我的WinForm应用程序同时关闭.为什么?我想保留WinForm窗口.
private void btn_to_console_Click(object sender, EventArgs e)
{
if (NativeMethods.AllocConsole())
{
lbl_console_alloc_result.Text = "Console allocation successfully!";
IntPtr stdHandle = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE);
Console.WriteLine("from WinForm to Console!");
lbl_console_alloc_result.Text = Console.ReadLine();
}
else
lbl_console_alloc_result.Text = "Console allocation failed!";
}
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetStdHandle")]
public static extern System.IntPtr GetStdHandle(Int32 nStdHandle);
/// Return Type: BOOL->int
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "AllocConsole")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool AllocConsole();
Run Code Online (Sandbox Code Playgroud)
提前致谢...