小编And*_*rew的帖子

VS2019中的C++20 chrono解析问题(最新)

我有一个使用 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)

c++ date c++-chrono c++20

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

如何创建带有负索引的python列表

我是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控制台中。

我究竟做错了什么?

在此先感谢您的帮助。

python indexing list

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

range-v3 连接函数将两个容器连接在一起

我一直在努力理解 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)

c++ range-v3 c++20

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

周期计数功能

我是 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++ c++-chrono

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

如何在 C++ 中将 Pascal TDateTime(double) 时间转换为 Unix 纪元

我需要使用 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 值?

c++ delphi tdatetime

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

如何在 lambda 中检索连接范围的索引?

我有以下代码:

#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)

c++ range-v3 c++20

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

标签 统计

c++ ×5

c++20 ×3

c++-chrono ×2

range-v3 ×2

date ×1

delphi ×1

indexing ×1

list ×1

python ×1

tdatetime ×1