编写下面的程序是为了使用C++ 11 std :: regex_match&std :: regex_search获取"Day"信息.但是,使用第一种方法返回false
,第二种方法返回true
(预期).我阅读了与此相关的文档和已存在的SO问题,但我不明白这两种方法之间的区别以及何时应该使用它们中的任何一种?对于任何常见问题,它们都可以互换使用吗?
regex_match和regex_search之间的区别?
#include<iostream>
#include<string>
#include<regex>
int main()
{
std::string input{ "Mon Nov 25 20:54:36 2013" };
//Day:: Exactly Two Number surrounded by spaces in both side
std::regex r{R"(\s\d{2}\s)"};
//std::regex r{"\\s\\d{2}\\s"};
std::smatch match;
if (std::regex_match(input,match,r)) {
std::cout << "Found" << "\n";
} else {
std::cout << "Did Not Found" << "\n";
}
if (std::regex_search(input, match,r)) {
std::cout << "Found" << "\n";
if (match.ready()){
std::string out = match[0];
std::cout …
Run Code Online (Sandbox Code Playgroud) 我尝试做这样的事情:
<DataGrid Name="myGrid" ItemSource="{Binding Path=MyCollection}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem
Command="{Binding RemoveRow}"
CommandParameter="{Binding ElementName=myGrid, Path=SelectedItem}">
</ContextMenu>
</DataGridContextMenu>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
但我总是得到null(我也试过SelectedIndex和SelectedValue)
如果我将以下参数传递给执行代码,它的工作原理如下:
<MenuItem Command="{Binding RemoveRow}" CommandParameter="1">
Run Code Online (Sandbox Code Playgroud) 最近Herb Sutter就"现代C++:你需要知道什么"发表了精彩演讲.本次演讲的主题是效率以及数据位置和访问内存的重要性.他还解释了内存(数组/向量)的线性访问如何被CPU所喜爱.他从另一个经典参考"Bob Nystrom的游戏表演"中就此主题举了一个例子.
阅读这些文章后,我得知有两种类型的缓存会影响程序性能:
Cachegrind工具还测量我们程序的缓存类型检测信息.许多文章/博客已经解释了第一点,以及如何实现良好的数据缓存效率(数据位置).
但是我没有获得关于主题指令缓存的更多信息以及我们应该在我们的程序中采取什么样的方法来实现更好的性能?根据我的理解,我们(程序员)对哪条指令或执行的命令没有多少控制权.
如果小型c ++程序解释了这个计数器(.ie指令缓存)将如何随着我们的编写程序风格而变化,那将是非常好的.程序员应遵循哪些最佳实践来达到更好的性能?
我的意思是,如果我们的程序(矢量与列表)以类似的方式解释第二点,我们可以理解数据缓存主题.这个问题的主要目的是尽可能地理解这个主题.
我IN
用来选择东西......
WHERE categories IN ("red", "blue", "green")
Run Code Online (Sandbox Code Playgroud)
这会选择红色,蓝色或绿色类别中的任何项目,我的问题是,有没有办法选择必须属于所有三个类别的项目?
我正在努力解决这个问题.
我们可以使用Kruskal算法或Prim的MST算法获得MST.
对于"次佳"MST,我可以:
但这在O(VE)中运行,其中V是顶点数,E是边数.
如何使用Union-find不相交集或LCA(最低共同的ancester)来加快速度?
提示,pseodo代码或Web链接指针.
任何帮助将非常感谢!谢谢:)
我使用C++ 11中支持的模板元编程技术在编译时(constexpr)问题中编写了Fibonacci数计算程序.这样做的目的是计算模板元编程方法和旧的传统方法之间的运行时间差异.
// Template Metaprograming Approach
template<int N>
constexpr int fibonacci() {return fibonacci<N-1>() + fibonacci<N-2>(); }
template<>
constexpr int fibonacci<1>() { return 1; }
template<>
constexpr int fibonacci<0>() { return 0; }
// Conventional Approach
int fibonacci(int N) {
if ( N == 0 ) return 0;
else if ( N == 1 ) return 1;
else
return (fibonacci(N-1) + fibonacci(N-2));
}
Run Code Online (Sandbox Code Playgroud)
我在GNU/Linux系统上运行N = 40的两个程序并测量时间,发现传统解决方案(1.15秒)比基于模板的解决方案(0.55秒)慢两倍左右.这是一个重大改进,因为这两种方法都基于递归.
为了更好地理解它,我用g ++ 编译了程序(-fdump-tree-all标志),发现编译器实际上生成了40个不同的函数(如fibonacci <40>,fibonacci <39> ... fibonacci <0>).
constexpr int fibonacci() …
Run Code Online (Sandbox Code Playgroud) 已经提出将大小的释放特征包括在C++ 1y中.但是我想了解它将如何影响/改进当前的c ++ 低级内存管理?
对于C++ 11,程序员可以定义一个静态成员函数operator delete,它接受一个size参数来指示要删除的对象的大小.等效的全局运算符删除不可用.这种遗漏带来了不幸的性能后果.
现代内存分配器通常在大小类别中进行分配,并且出于空间效率的原因,不要将对象的大小存储在对象附近.然后,取消分配需要搜索包含该对象的大小类别存储.这种搜索可能很昂贵,特别是因为搜索数据结构通常不在内存缓存中.解决方案是允许实现和程序员定义全局运算符delete的大小版本.当大小版本可用时,编译器应优先调用大小不同的版本.
从上面的段落看,它看起来像操作员删除所需的大小信息可以保持并因此通过使用的程序传递.这将避免在重新分配时搜索大小.但是根据我的理解,在分配时,内存管理将大小信息存储在某种标题中(在dlmalloc中解释为boundary-tag方法),这将在解除分配时使用.
T* p = new T();
// Now size information would be stored in the header
// *(char*)(p - 0x4) = size;
// This would be used when we delete the memory????.
delete p;
Run Code Online (Sandbox Code Playgroud)
如果大小信息存储在标题中,为什么重新分配需要搜索它?看起来我错过了一些显而易见的东西,完全不理解这个概念.
此外,在处理C++中的低级内存管理时,如何在程序中使用此功能.希望有人能帮我理解这些概念.
我有一个第三方库(比如TP.so)使用不正确的库版本(比如GenericV1.so)而不是使用它应该使用的那个(比如GenericV2.so)的问题.附加的库包含在我的程序中.
对此的直接解决方案(在SO上有详细记录)是使用带有RTLD_DEEPBIND标志的dlopen().但该标志仅在Linux上有效,而不是在HP-UX,Solaris,AIX等其他平台上有效.
RTLD_DEEPBIND是否有替代方案可用于这些非Linux平台?
谢谢你的回复
在尝试使用当前的GCC在C++中使用一些新的/实验性的东西时,我正面临链接错误.似乎已经发布了类似的问题,但仍然出现错误.
有人可以解释一下我在这里做了什么/错在哪里?希望我已经提供了与此相关的所有详细信息.
TEST.CPP
#include<iostream>
#include<string>
#include<experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main(int argc, const char* argv[])
{
std::string s(argv[0]);
fs::path p(s);
std::cout << "p = " << p << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经构建(调试版本)新gcc版本6.0.0 20151122(实验)(GCC)为g ++ - 6.0.0.这里我使用FS-TS所需的新-lstdc ++ fs选项.我可以使用其他新东西,如C++概念.
~/practice/gcc6$ g++-6.0.0 -v -g -lstdc++fs -o out test.cpp
Using built-in specs.
COLLECT_GCC=g++-6.0.0
COLLECT_LTO_WRAPPER=/usr/gcc_6_0/libexec/gcc/x86_64-linux-gnu/6.0.0/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_6_0 --with-gmp=/usr/gcc_6_0 --with-mpfr=/usr/gcc_6_0 --with-mpc=/usr/gcc_6_0 --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-6.0.0
Thread model: posix
gcc version 6.0.0 …
Run Code Online (Sandbox Code Playgroud) 我正在阅读关于raw_storage_iterator组件的TC++ PL .使用此组件可以获得性能优势,因为它可以避免分配(更昂贵)并使用复制构造.在我看来它应该在序列/容器中使用,在那里我们可以有大量的元素,因此赋值调用的数量可能会产生很大的影响.
理论上它很明确,它在我看来这个组件对容器类型类很有用.但是,我想了解我们应该在位详细信息中使用此组件(带有实际示例)以获得其性能优势?