容器是类,数据结构或抽象数据类型,其实例是其他对象的集合。容器通常使用泛型或模板,以便可以添加各种对象。
如何在不迭代(forEach或for of)遍历整个容器的情况下获取ES6 Map/Set的最后一个元素?
我的 docker 文件中有一个 pm2 命令,当容器启动时,该命令应该在容器内运行: CMD [“pm2”,“启动”,“ecosystem.local.json”] CMD [“pm2”,...
Docker 的 `docker0` 设备反复死机(`inet addr` 消失)
我正在运行 Docker 版本 1.4.1,在 Ubuntu 14.04 上构建 5bc2ff8。当我 docker 运行任何容器时,几分钟后我的 docker0 网桥“死亡”,并且容器停止能够访问网络......
我有一个专门的模板化容器类,其中包含固定大小的数组(大小由模板定义): 模板 类容器{ 受保护: T _arr[N]; 标准::s...
在我的 docker-compose.yml 中,我有一个服务 A,它有服务 B 和 C 作为客户端。我想说,为了我的项目的目的,这三个都可以分组来模拟一个“系统”。如果我...
尝试创建管理员用户时出错: 尝试创建管理员用户时出错:无法连接到数据库:驱动程序中发生异常:SQLSTATE[HY000] [1045] 访问被拒绝...
使用 constexpr if 定义并声明 const std::array
我正在尝试实现高斯-勒让德求积,我想要一个模板化函数 将点数作为模板参数。 现在我有这个: 模板 我正在尝试实现高斯-勒让德求积,并且我想要一个模板化函数 将点数作为模板参数。 现在我有这个: template<int number_of_quadrature_points> double gaussian_quadrature_integral_core(double (*f)(double), double from, double to){ double scaling_factor = (to-from)/2; double average_factor = (from+to)/2; std::array<double, number_of_quadrature_points> factors; std::array<double, number_of_quadrature_points> points; if constexpr(number_of_quadrature_points == 2){ factors = {1, 1}; points = {-1.0/sqrt(3), 1.0/sqrt(3)}; } if constexpr(number_of_quadrature_points == 3){ factors = {5.0/9.0, 8.0/9.0, 5.0/9.0}; points = {-sqrt(3.0/5.0), 0, sqrt(3.0/5.0)}; } double sum = 0; for(int i = 0; i < number_of_quadrature_points; i++){ sum += factors.at(i)*((*f)(scaling_factor*points.at(i)+average_factor)); } sum *= scaling_factor; return sum; } 如您所见,当模板参数发生变化时,不仅数组大小发生变化,而且内容也发生变化,但对于给定的大小,内容是众所周知的。出于这个原因,我认为如果 std::arrays 是 const static 会更好,因为该函数被调用很多次。 现在我只能使用 if constexpr 来声明数组,但是如何使用它来定义和声明数组,以便它在 if constexpr 范围之外可见并且数组只定义一次? 添加两个辅助函数就足够了(如果您使用的是 C++20): template<unsigned N> constexpr auto init_factors() { std::array<double, N> rv; if constexpr(N == 2){ rv = {1., 1.}; } else { rv = {5.0/9.0, 8.0/9.0, 5.0/9.0}; } return rv; } template<unsigned N> constexpr auto init_points() { std::array<double, N> rv; if constexpr(N == 2){ rv = {-1.0/std::sqrt(3.), 1.0/std::sqrt(3.)}; } else { rv = {-std::sqrt(3.0/5.0), 0, std::sqrt(3.0/5.0)}; } return rv; } template<unsigned number_of_quadrature_points> double gaussian_quadrature_integral_core(double (*f)(double), double from, double to) { static constexpr auto factors = init_factors<number_of_quadrature_points>(); static constexpr auto points = init_points<number_of_quadrature_points>(); [...] 为了防止使用错误的点数,您可以添加 static_assert template<unsigned number_of_quadrature_points> double gaussian_quadrature_integral_core(double (*f)(double), double from, double to) { static_assert(number_of_quadrature_points==2||number_of_quadrature_points==3); ...或者如果您想稍后进行专业化,请阻止使用 SFINAE 进行匹配: #include <type_traits> template<unsigned number_of_quadrature_points> std::enable_if_t<number_of_quadrature_points==2||number_of_quadrature_points==3, double> gaussian_quadrature_integral_core(double (*f)(double), double from, double to) { 您可能有模板变量: template <std::size_t N> static constexpr std::array<double, N> factors; template <std::size_t N> static constexpr std::array<double, N> points; template <> constexpr std::array<double, 2> factors<2>{{1, 1}}; template <> constexpr std::array<double, 2> points<2>{{-1.0 / sqrt(3), 1.0 / sqrt(3)}}; template <> constexpr std::array<double, 3> factors<3>{{5.0 / 9.0, 8.0 / 9.0, 5.0 / 9.0}}; template <> constexpr std::array<double, 3> points<3>{{-sqrt(3.0 / 5.0), 0, sqrt(3.0 / 5.0)}}; 然后 template<int number_of_quadrature_points> double gaussian_quadrature_integral_core(double (*f)(double), double from, double to) { const double scaling_factor = (to - from) / 2; const double average_factor = (from + to) / 2; double sum = 0; for(int i = 0; i < number_of_quadrature_points; i++){ sum += factors<number_of_quadrature_points>[i] * ((*f)(scaling_factor * points<number_of_quadrature_points>[i] + average_factor)); } sum *= scaling_factor; return sum; } 演示 请注意,如果您没有 constexpr constexpr(而 const 没有),则必须将 sqrt 替换为 std::。 您可以使用本主题中类似的内容: 有没有办法在 C++ 模板特化中对常量值参数设置条件? 因此,我们使用 std::enable_if 和 SFINAE 创建两个模板专业化。我们通过模板参数number_of_quadrature_points来区分它们。这样我们就有了全局参数,不必多次定义和实例化。此代码使用 c++17 编译。 我还建议使用现代方法 std::function<> 而不是函数指针。 #include <array> #include <cmath> #include <iostream> #include <functional> template<int number_of_quadrature_points, typename E=void> struct gaussian_quadrature_params { }; template<int number_of_quadrature_points> struct gaussian_quadrature_params<number_of_quadrature_points, std::enable_if_t<(number_of_quadrature_points==2)> > { constexpr static const std::array<double, number_of_quadrature_points> factors = {1, 1}; constexpr static const std::array<double, number_of_quadrature_points> points = {-1.0/sqrt(3), 1.0/sqrt(3)}; }; template<int number_of_quadrature_points> struct gaussian_quadrature_params<number_of_quadrature_points, std::enable_if_t<(number_of_quadrature_points==3)> > { constexpr static const std::array<double, number_of_quadrature_points> factors = {5.0/9.0, 8.0/9.0, 5.0/9.0}; constexpr static const std::array<double, number_of_quadrature_points> points = {-sqrt(3.0/5.0), 0, sqrt(3.0/5.0)}; }; double f(double x) { return x; } template<int number_of_quadrature_points> double gaussian_quadrature_integral_core(std::function<double(double)> f, double from, double to){ double scaling_factor = (to-from)/2; double average_factor = (from+to)/2; double sum = 0; for(int i = 0; i < number_of_quadrature_points; i++){ sum += gaussian_quadrature_params<number_of_quadrature_points>::factors.at(i)*(f(scaling_factor*gaussian_quadrature_params<number_of_quadrature_points>::points.at(i)+average_factor)); } sum *= scaling_factor; return sum; } int main() { std::cout << gaussian_quadrature_integral_core<2>(f, -1.0, 1.0) << std::endl; std::cout << gaussian_quadrature_integral_core<3>(f, -1.0, 1.0) << std::endl; } 怎么样 // N: number_of_quadrature_points template<int N> double gaussian_quadrature_integral_core(double (*f)(double), double from, double to) { constexpr std::array<double, N> factors = []() ->std::array<double, N>{ if constexpr(N == 2) return {1.0, 1.0}; else if constexpr(N == 3) return {5.0 / 9.0, 8.0 / 9.0, 5.0 / 9.0}; // ... other N cases }(); constexpr std::array<double, N> points= []()->auto{ if constexpr(N == 2) return std::array<double, N>{-1.0 / std::sqrt(3), 1.0 / std::sqrt(3)}; else if constexpr(N == 3) return std::array<double, N>{-std::sqrt(3.0 / 5.0), 0, std::sqrt(3.0 / 5.0)}; // ... other N cases }(); double scaling_factor = (to - from) / 2; double average_factor = (from + to) / 2; double sum = 0; for (int i = 0; i < N; i++) sum += factors.at(i)*((*f)(scaling_factor * points.at(i) + average_factor)); sum *= scaling_factor; return sum; } 使用 if constexpr 声明和定义数组。
Jenkins 作为 AKS 上的容器 - Docker in Docker 方法
我们正在尝试将 jenkins 作为 AKS 集群中的容器运行。对于这个用例,我们需要以 docker 方法实现 docker,并有一个执行容器(存在于 jenkins 从属 pod 中)来
在 Windows 主机下安装 Docker 卷对我来说是一个巨大的痛苦,而且我无法让它工作。 目前我得到了以下简单的 Dockerfile: 来自 php:5-apache 运行 apt-...
如何在 k8cluster 托管的服务器中安装 jmeter 服务器代理
我正在尝试从 jmeter 收集 perfmon 结果并在我的 jmeter 中安装 perfmon 插件。 我需要执行哪些步骤才能将服务器代理安装到 k8cluster 中的 pod 或主机? 我去了我...
Kubernetes 使用默认的 docker 注册表而不是 quay 或其他
我已经部署了一个本地 kubernetes 集群用于学习,直到昨天为止都运行良好,但我现在面临的问题是默认使用 quay.io 来提取显然没有 IM 的图像...
考虑这样一个类(省略细节): 模板 类 my_flat_map { // 许多成员函数使用 const ref 作为键 自动查找(K const& key) ...
我正在尝试创建一个应用程序,让我可以将数据写入 Docker 中的 InfluxDB。当我在本地执行代码并在 Docker 上运行 Influx 时,一切正常。 我现在正在尝试将两者都放在
连接到 Synology Container Manager 上相邻容器中的 Mariadb
我正在使用 Synology Container Manager。我只有两个容器。一种使用 ProjectSend,另一种使用 Mariadb。两个容器都已启动并正在运行(根据容器管理器)。 第一次访问时
使用 docker compose 连接 Spring api REST 容器与 MySQL 容器
使用互联网上的一些指导、github上的存储库、教程等等,我正在尝试使用react-spring-mysql堆栈运行一个应用程序。根据我对 mysql 容器的理解,它是拒绝的......
我正在使用工作流在 GitHub Actions 上运行测试,该工作流使用我创建的自定义 Docker 映像。 取消工作流时,GitHub 根据文档杀死 docker 容器。 有没有...
是否有简单的方法来运行附加的 ECS 任务或仅在容器运行时跟踪日志(即显示所有关联日志后分离)? 使用 AWS CLI (1.17.0) 和 ecs-...
我在 Azure 应用服务中托管的 .NET API 遇到问题。应用程序在正常负载下启动没有任何问题,但是当负载增加时,应用程序在启动过程中挂起......
ASP.NET Core + Docker 无法在指定端口上访问
我无法访问内部运行 ASP.NET Core 3.1 应用程序的容器。 目标是在端口 5000 上的容器中运行应用程序。当我使用标准 VS pro 在本地运行它时...
我正在尝试在Gitlab中使用ci / cd创建自己的容器并将它们上传到Gitlab中。但该项目的latest标签预计会被替换,但在下次上传时不会被替换。 ...