我有一个使用 date.h 库在 C++14 下工作的函数,但我正在将程序转换为使用 C++20,但它不再工作。请问我做错了什么?
我的C++14/date.h代码如下:
#include <date/date.h> // latest, installed via vcpkg
#include <chrono>
auto StringToUnix(const std::string& source) -> std::time_t
{
auto in = std::istringstream(source);
auto tp = date::sys_seconds{};
in >> date::parse("%Y-%m-%d %H:%M:%S", tp);
return std::chrono::system_clock::to_time_t(tp);
}
Run Code Online (Sandbox Code Playgroud)
我转换后的C++20函数如下:
#include <chrono>
auto StringToUnix(const std::string& source) -> std::time_t
{
using namespace std::chrono;
auto in = std::istringstream(source);
auto tp = sys_seconds{};
in >> parse("%Y-%m-%d %H:%M:%S", tp);
return system_clock::to_time_t(tp);
}
Run Code Online (Sandbox Code Playgroud)
我在 VS2019 社区(最新)中收到的错误是:
E0304 no instance of overloaded function "parse" matches the …Run Code Online (Sandbox Code Playgroud) 我是python的新手,需要创建一个带有负索引的列表,但到目前为止尚未成功。
我正在使用此代码:
a = []
for i in xrange( -20, 0, -1 ):
a[i] = -(i)
log.info('a[{i}]={v}'.format(i=i, v=a[i]))
else:
log.info('end')
Run Code Online (Sandbox Code Playgroud)
并获取日志输出为
end
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我使用的是站点呼叫Quantopian,因此log.info来自其基础结构,只是将输出打印到Web控制台中。
我究竟做错了什么?
在此先感谢您的帮助。
我一直在努力理解 Range-v3join文档,但老实说,我不明白。而且我也找不到任何相关的例子。
有人可以告诉我如何创建两个双端队列向量的联合视图。我已经尝试过这些方法,但无济于事。
#include <range/v3/all.hpp>
#include <deque>
#include <iostream>
struct data_t
{
int data;
int some_other_data;
};
auto main() -> int
{
using namespace ranges;
auto v1 = std::deque<data_t>() = { {1,1}, {2,2}, {3,3}, {4,4}, {5,5} };
auto v2 = std::deque<data_t>() = { {6,6}, {7,7}, {8,8}, {9,9}, {10,10} };
auto vv = v1 | ranges::actions::join(v2);
// auto vv = ranges::actions::join(v1, v2); // Tried this too
for(auto v : vv)
{
std::cout << v.data << ", " << std::endl; …Run Code Online (Sandbox Code Playgroud) 我是 chrono 库的新手,我正在尝试使用它来编写一个函数,该函数返回两次之间有多少 5 分钟的时间段。请注意:1 分钟源和 5 分钟结果周期可能不同,因此解决方案需要灵活(例如, 5 分钟源和 15 分钟结果周期是一种可能的组合)。
例如,我有以下通用代码:
using namespace std::chrono;
using namespace std::chrono_literals;
auto tp_now = system_clock::now(); //define 1st tp
auto tp_test = tp_now - 4min; //define 2nd tp
duration<int64_t, std::ratio<1, 5*60>> five_mins; //define a duration of 5mins
std::cout << "period_index = " << floor(five_mins(tp_test)).count() << std::endl; //print out the
//period
//duration count
Run Code Online (Sandbox Code Playgroud)
此代码无法编译(我不确定为什么),但它希望显示 4 分钟测试周期内有多少 5 分钟周期。显然,4 分钟的测试时间是一个变量,可能会有所不同。下面给出了 4min 变量与相应结果不同的一些示例:
0-4 mins result = 0
5-9 mins result = 1
10-14 mins …Run Code Online (Sandbox Code Playgroud) 我需要使用 C++ 将一个双精度值的 Pascal TDateTime 对象转换为 Unix 纪元。
提出了一个可能的解决方案(https://forextester.com/forum/viewtopic.php?f=8&t=1000):
unsigned int UnixStartDate = 25569;
unsigned int DateTimeToUnix(double ConvDate)
{
return((unsigned int)((ConvDate - UnixStartDate) * 86400.0));
}
Run Code Online (Sandbox Code Playgroud)
但是,此转换代码会产生错误,例如:
TDateTime 时间值 = 37838.001388888886 (05.08.2003 02:00)
转换为 Unix 纪元 1060041719 (05.08.2003 00:01:59) 这显然是不正确的。
如何准确地转换此 TDateTime 值?
我有以下代码:
#include <range/v3/all.hpp>
#include <deque>
#include <iostream>
auto main() -> int
{
using namespace ranges;
namespace views = ranges::views;
auto v1 = std::deque<double>({ 123.080, 123.110, 123.105, 123.090, 123.095 });
auto v2 = std::deque<double>({ 123.100, 123.120, 123.115, 123.070, 123.105 });
auto vc = ranges::views::concat(v1, v2);
auto lambda = [&](auto& elem){
const auto index = &elem - &vc[0];
if (index == 0 || index + 1 > vc.size()) return false;
if ((vc[index - 1] > vc[index] && vc[index] < vc[index + 1]) …Run Code Online (Sandbox Code Playgroud)