小编Jos*_*osh的帖子

删除旧的git提交

我对git很新,并且想知道这样的事情是否可行?

>git log --pretty=oneline --abbrev-commit
2f05aba Added new feature
3371cec Fixed screw up    <-- I want to remove this
daed25c Screw up          <-- and remove this.
e2b2a84 First.                So it's like they never happend.
Run Code Online (Sandbox Code Playgroud)

这可能吗?

git

75
推荐指数
4
解决办法
6万
查看次数

使用CMake用/ MT而不是/ MD编译

我在Windows SDK和NMake Makefiles上使用CMake.

默认情况下,它使用/MD编译器开关进行编译.

如何更改它以使用/MT开关编译?

cmake

48
推荐指数
3
解决办法
3万
查看次数

C++ std :: find使用自定义比较器

这基本上就是我想做的事情:

bool special_compare(const string& s1, const string& s2)
{
    // match with wild card
}

std::vector<string> strings;

strings.push_back("Hello");
strings.push_back("World");

// I want this to find "Hello"
find(strings.begin(), strings.end(), "hell*", special_compare);

// And I want this to find "World"
find(strings.begin(), strings.end(), "**rld", special_compare);
Run Code Online (Sandbox Code Playgroud)

std::find不幸的是,这并不像那样.所以只使用STL,我该怎么做呢?

c++ stl

31
推荐指数
5
解决办法
3万
查看次数

strstr比算法快?

我有一个21056字节的文件.

我在C中编写了一个程序,将整个文件读入缓冲区,然后使用多个搜索算法在文件中搜索82个字符的标记.

我已经使用了"精确字符串匹配算法"页面中所有算法的实现.我用过:KMP,BM,TBM和Horspool.然后我使用strstr并对每一个进行基准测试.

我想知道的是,每次strstr优于所有其他算法.有时候唯一更快的是BM.

strstr应该是最慢的?

这是我的基准代码,其中包含基准测试BM的示例:

double get_time()
{
    LARGE_INTEGER t, f;
    QueryPerformanceCounter(&t);
    QueryPerformanceFrequency(&f);
    return (double)t.QuadPart/(double)f.QuadPart;
}
Run Code Online (Sandbox Code Playgroud)
before = get_time();
BM(token, strlen(token), buffer, len);
after = get_time();
printf("Time: %f\n\n", after - before);
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么strstr表现优于其他搜索算法吗?如果需要,我会根据请求发布更多代码.

c algorithm performance string-matching strstr

16
推荐指数
2
解决办法
1万
查看次数

C++ RAII问题

因此,我理解它正确实现RAII,如果我在哪里调用CreateFont,我将它包装CreateFont在构造函数和DeleteObject析构函数中的类中,所以当它超出范围时它会清理它.

第一个问题是,我最终会不会有大量的课程吗?特别是因为类只有构造函数和析构函数.

第二个问题是,如果我在WndProc中调用CreateFont类,那么它会不断超出范围.我应该在WndMain 做我所有的电话CreateFont或喜欢LoadBitmap吗?我习惯于调用这些功能WM_CREATE并清理它们WM_DESTROY.

c++ windows raii

10
推荐指数
1
解决办法
824
查看次数

循环中的条件,最佳实践?

说我有这样的循环:

for (int i = 0; i < someint; i++)
{
    if (i == somecondition)
    {
        DoSomething();
        continue;
    }
    doSomeOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

与...

for (int i = 0; i < someint; i++)
{
    if (i == somecondition)
    {
        DoSomething();
    }
    else
    {
        doSomeOtherStuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有理由使用一个而不是另一个?或者只是个人偏好?
我要求的主要语言是Java,但我想它也适用于大多数其他语言.

c++ java loops coding-style

9
推荐指数
3
解决办法
1416
查看次数

C++ UNICODE和STL

Windows API看起来很重要UNICODE,您在Visual C++中创建了一个新项目,UNICODE默认情况下将其设置为.
我想成为一名优秀的Windows程序员,我想使用它UNICODE.

问题是C++标准库和STL(例如std :: stringstd :: runtime_error)不能很好地处理UNICODE字符串.我只能传递std :: string,或者传递char*std :: runtime_error,我很确定std :: string不支持UNICODE.

所以我的问题是,我应该如何使用诸如std :: runtime_error之类的东西?我应该UNICODE和常规混合ANSI吗?(我认为这是一个坏主意......)
只是ANSI在我的整个项目中使用?(不喜欢..)或者什么?

c++ windows unicode stl c++-standard-library

9
推荐指数
1
解决办法
2288
查看次数

C win32选项卡控件

好吧首先使用win32 api编写C语言,没有mfc,没有.net,没有wxwidgets.我已经创建了一个带有WC_TABCONTROL类的窗口,并添加了选项卡,一切正常,除了......我需要在每个选项卡中都有内容,我得到了msdn的印象,我需要为每个页面创建一个对话框,然后在用户选择选项卡时加载对话框.唯一的问题是我的主窗口不是一个对话框,所以使选项卡的对话框完美适合不是太好了.

所以我想知道是否有更好的方法来做到这一点?我想过只是隐藏并显示每个标签的不同控件,但这似乎不是一个好主意.

我想要的是当我的应用程序启动时它将调整窗口和选项卡控件的大小以适应所有选项卡(3-4个选项卡)所需的最小尺寸,并且窗口不会调整大小,我想简化事情一点点.我按照msdn上的示例(将每个对话框加载到内存中,通过每个对话框循环并将RECT设置为所需的最小大小然后调整所有内容)来做到这一点,问题是大小是在对话框单元中而我不能将其转换为像素,因为我还没有对应框的HWND.

基本上我的问题是使用选项卡控件管理窗口控件的最佳方法是什么.因此,如果我有一个制表符控件并且用户从tab1更改为tab2,我希望向用户显示不同的控件.

c api winapi tabs

8
推荐指数
1
解决办法
4260
查看次数

C++ win32从资源加载字符串

好吧所以我最近决定将我的应用程序中的每个字符串都放到一个STRINGTABLE中,这样我就可以轻松翻译成不同的语言.我知道如何使用LoadString()api,但这涉及到我想要加载的每个字符串都有一个不同的变量,如果我的应用程序有100个字符串,那就是很多变量.这是最好的方法吗?或者我应该创建一个全局变量用作缓冲区来根据需要加载字符串?此外,由于无法知道我的字符串有多大,我应该创建一个足够大的缓冲区来保存我可能拥有的任何字符串,还是有更好的方法来做到这一点?

还要根据需要加载字符串对性能有害吗?有什么方法可以预加载它们吗?

RE:好的,我已经尝试创建一个256字节大小的缓冲区并根据需要将字符串加载到那里,尽管我遇到了一个小问题...

这是我的代码显示错误消息,错误是"错误分配内存!"

LoadString(g_hInst, IDS_ERROR_MEMORY, szBuffer, sizeof(szBuffer)/sizeof(TCHAR));
MessageBox(NULL, szBuffer, TEXT("Error"), MB_OK | MB_ICONERROR);
ExitProcess(1);

我将缓冲区作为全局变量: TCHAR szBuffer[256];

这可以工作但是,我喜欢也将"错误"文本存储到字符串表中并加载当我想显示错误时,问题是需要我有2个全局变量来加载字符串,并且有一些地方我需要一次加载更多的东西.

有多个全局变量有更好的解决方案吗?

c string api resources winapi

7
推荐指数
1
解决办法
9212
查看次数

C/C++编码问题

我在尝试理解不同的编码时遇到了一些问题.

字符串的默认编码是什么?

char ascii[]= "Some text"; // This is plain ASCII right?
wchar_t utf[] = L"Some Text"; // Is this UTF-16? Or ASCII stored in wchar_t's?
MessageBoxW(NULL, L"Hello", L"HI", MB_OK); // What encodings are the 2 strings in?
Run Code Online (Sandbox Code Playgroud)

然后,我将如何创建UTF-8字符串?如果我想在MessageBox中显示UTF-8字符?

我的问题主要针对Windows,但如果在不同的操作系统上有所不同,我有兴趣知道.

c++ string unicode encoding

7
推荐指数
1
解决办法
2283
查看次数