小编dxf*_*ldu的帖子

C ++ Lambda函数-与目标相比如何返回最接近的向量元素

我有一个已经排序的向量,称为ve​​c,还有一个目标变量。目标是返回最接近目标的向量元素。

我试图将C ++ 11 lambda函数与[=]一起使用以捕获外部变量

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec{1,2,3,4,5};
    double target = 3.14159;

    int res = min(vec.begin(), vec.end(), [=](int v1, int v2) -> bool {
            return abs(v1-target) < abs(v2-target);
        });

    cout << res << endl;

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

我希望得到res = 3,但是会返回错误:

error: cannot convert 'const __gnu_cxx::__normal_iterator<int*, std::vector<int> >' to 'int' in initialization
Run Code Online (Sandbox Code Playgroud)

c++ lambda comparator c++11

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

Visual Studio Code:如何为 g++ 编译器添加参数?

我想使用 Mac 的 clang 目前不支持的一些 C++17 功能,所以我使用

brew install gcc --HEAD
Run Code Online (Sandbox Code Playgroud)

安装 g++ 10.0.1 版本。通过直接调用,代码在终端中运行良好

g++-HEAD -std=c++17 test.cpp
Run Code Online (Sandbox Code Playgroud)

我还在 bash 中创建了一个链接ln -s g++-HEAD g++,并alias g++='g++ -std=c++17'在 中添加了一个别名.bash_profile,这样

g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

会做同样的工作。

我想在 Visual Studio Code - Mac 版本中运行 C++ 代码。安装 Microsoft 的 C/C++ 扩展和 Code Runner 扩展后,我在 VSCode 中设置文件settings.json以包含编译器参数:

{
    "C_Cpp.default.cppStandard": "c++17",
    "C_Cpp.default.compilerPath": "/usr/bin/g++",
    "C_Cpp.default.intelliSenseMode": "gcc-x64",
    "C_Cpp.default.compilerArgs": [
        "-std=c++17"
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试运行相同的代码。但是,我收到警告:

[Running] cd "/some directory/" && g++ test.cpp -o test && "/some …
Run Code Online (Sandbox Code Playgroud)

c++ parameter-passing visual-studio-code

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

C++11:auto 如何处理 () 初始值设定项?

我知道 C++11 初始化vectorusing 的方式auto,实际上std::initializer_list是初始化而不是vector. 但是,给出以下代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    auto x = {1, 2};
    cout << typeid(x).name() << endl;
    auto z = (1, 2);
    cout << z << ", type: " << typeid(z).name() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白:

  1. 为什么x返回St16initializer_listIiE的类型是 'z' 返回的类型是 'i',使用 gcc-10 编译器。我们不应该只返回std::initializer_list和'int'吗?
  2. 有一个警告zwarning: left operand of comma operator has no effect [-Wunused-value]。那么结果的第二部分是:2, …

c++ initializer-list auto c++11

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