小编Jar*_*d42的帖子

C++ - 是否将 const 幻数放入命名空间

我总是习惯#define在 cpp 文件开头的某个地方定义幻数。我想把它改成const数字。(全局变量在 cpp 文件中声明/定义。)这是个好主意吗?我应该将它们放入匿名命名空间吗?我从不#include在任何地方使用 cpp 文件。

c++ namespaces constants magic-numbers

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

初始化列表的类启动了std :: array成员变量

在c ++ 17中你可以做到

std::array a{ "one", "two", "three" };
Run Code Online (Sandbox Code Playgroud)

得到一个std::array<const char*, 3>.真棒!

因为数组成员变量必须在类声明中指定它们的大小,所以它不能用作类变量.我想用这些任意长的初始化列表初始化数组和一个或多个constexpr方法之一创建一个类.我希望唯一的构造函数将初始化列表作为参数.有没有办法做到这一点?

c++

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

反斜杠导致问题c ++

我试图在这样的字符串中使用C++中的反斜杠:

HWND hwnd = FindWindowA(NULL, "C:\Example\App.exe");
Run Code Online (Sandbox Code Playgroud)

所以对于这个例子,我会得到这些错误/警告:"未知转义序列:'\ E'""未知转义序列:'\ A'".因为我需要输入窗口的确切名称,有没有办法避免使用反斜杠或阻止编译器将它们解释为"转义序列"?

c++ windows escaping path

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

有没有一种数学上解决UVA 417的方法?

我正在尝试解决UVA 417,但无法解决。我见过的所有解决方案都首先生成所有可能的值,将它们存储在映射中,然后搜索以查找所需的字符串。这对我来说似乎很微不足道。难道没有办法数学上解决这个问题吗?

考虑输入“ abc”。如果没有规定每个后续字符都应大于当前字符的条件,则可以通过简单地计算1 * 26 ^ 2 + 2 * 26 ^ 1 + 3 * 26 ^ 0来解决。难道没有办法以类似的方式解决原始问题吗?

我包括在网上找到的现有解决方案的代码:

#include <iostream>
#include <string>
#include <map>
#include <queue>

using namespace std;

map<string, int> M;

void generate_positions(){
    queue<string> Q;
    for(char c='a';c<='z';c++) Q.push(string(1,c));

    string s;

    int cont=1;

    while(!Q.empty()){
        s=Q.front();
        Q.pop();

        M[s]=cont;
        cont++;

        if(s.size()==5) continue;

        for(char c=s[s.size()-1]+1;c<='z';c++) Q.push(s+c);
    }
}

int main(){
    generate_positions();

    string s;
    map<string, int> :: iterator it;

    while(cin>>s){
        it=M.find(s);
        if(it==M.end()) cout<<0<<endl;
        else cout<<it->second<<endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

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

试图了解Shunting Yard算法

我正在尝试使用Shunting-yard算法,所以我开始研究它.在这样做的同时,我发现了一些我不太了解的有趣文档:

    // Current token is a number, push 
    // it to stack for numbers. 
    else if(isdigit(tokens[i])){ 
        int val = 0; 

        // There may be more than one 
        // digits in number. 
        while(i < tokens.length() && 
                    isdigit(tokens[i])) 
        { 
            val = (val*10) + (tokens[i]-'0'); 
            i++; 
        } 

        values.push(val); 
    } 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在里面while,变量val乘以10(val=(val*10)).有人可以帮助我理解为什么算法必须这样做?

c++ postfix-notation shunting-yard

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

有人可以帮我并行化这个 C++ 代码吗?

所以我的任务是找到一种方法来并行化这个简单的 C++ 问题。问题是......我真的......真的在并行编程概念上挣扎,不知道该怎么做。应采取的步骤如下:

1) 取一个正整数 N 作为参数
2) 创建一个大小为 N 的整数数组
3) 填充范围 [1,1000] 中的整数
4) 并行查找最大整数和数组的总和
5) 打印最大的整数整数和数组的总和。

在我进入第 4 步之前,这很容易。我不知道如何并行化这段代码。我听说过诸如线程和多线程之类的概念,但我对如何在 C++ 中实现它们的想法几乎为零,并且可以真正使用一些帮助 + 对此的详细解释。我还没有找到一个对我有意义的并行化 C++ 程序的具体示例。

#include  <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(){

cout << "Enter the Size of the Array (N):  \n ";
int N;
cin >> N;

int array[N];
int largest_number = 0;
int sum = 0;

srand(time(0));
cout << "Populating Array...\n";

//  Filling up the Array  with values
    for(int …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing multithreading

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

使用std :: optional作为常规指针与使用has_value()和value

std::optional 可以使用语法来访问其值,类似于普通指针一样。

std::optional<string> some_str;
if (some_str)
    (*some_str).c_str();
Run Code Online (Sandbox Code Playgroud)

但它也有两个功能,has_value()value()提供访问其价值和检查,如果该值存在。

std::optional<string> some_str;
if (some_str.has_value())
    some_str.value().c_str();
Run Code Online (Sandbox Code Playgroud)

我想知道这两者之间有什么区别?
1.更冗长
2.性能?
3.更好的日志记录和调试?value()会抛出异常。

c++ c++17 stdoptional

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

内联函数选择标准

我有以下几点:

//a.cpp
inline int f(int x) { return x; }
int g(int x) { return f(x); }

//b.cpp
#include <iostream>
inline int f(int x) { return x + 1; }
extern int g(int);
int main() {
    std::cout << g(2) << f(2) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出为22(MSVC和GCC),即a.cpp f内联函数而不是内联函数b.cppf在这种情况下选择功能的标准是什么?

c++ inline one-definition-rule

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

C++ regex_search 在 C 风格数组上进行匹配

我有一个 C 风格的数组(不一定以 null 结尾)。我想用正则表达式搜索它。我的代码如下:

const void* Search(const char* startAddress, const char* endAddress, std::regex *re)
{
    std::smatch match;
    auto ret = std::regex_search(startAddress, endAddress, *re);
Run Code Online (Sandbox Code Playgroud)

在目前的形式下,它工作得很好,但是我想知道它在哪里找到了那个特定的模式。一旦我将匹配添加为参数,编译器就无法找到合适的重载函数。我尝试在该区域之外创建一个string_view,但编译器也找不到任何适合这些迭代器的重载。

我正在专门寻找std::regex解决方案。我应该如何使用它?

c++ regex c++17

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

使用“ptrdiff_t”和“nullptr”完全模拟“intptr_t”?

鉴于intptr_t是可选的并且ptrdiff_t是强制性的,将p - nullptr是 的一个很好的替代品,从用with而不是?(intptr_t)p表示的结果转换回来。它在定义的实现上在语义上与 IIUC 等效,但也按其他方式工作。nnullptr + n(decltype(p))nintptr_t

如果我的上述说法是正确的,为什么该标准不允许不实施intptr_t?看来由此提供的自由并不是特别有价值,只是需要削减一组两个简单的本地源代码转换(或优化的等效项)。

c++ standards pointers integer type-conversion

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