没有用于调用std :: vector <std :: tuple> push_back的匹配函数

Abh*_*yal 3 c++ stl tuples vector c++11

我有一个示例程序,包含使用high_resolution_clock::now()标准chrono标题的6个时间点.我对它们各自进行差异b/w导致3个差异,并将它们auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();关于微秒.

我有另一个名为持续时间的变量,其分配如下:auto durations = std::make_tuple(duration1,duration2,duration3);包含先前的时间点差异.

我必须将这个元组推入一个向量,所以我已经介绍了std::vector<std::tuple<std::chrono::microseconds,std::chrono::microseconds,std::chrono::microseconds>> list;但是在使用时list.push_back(durations);我得到一个错误:

prog.cpp: In function 'int main()':
prog.cpp:36:29: error: no matching function for call to 'std::vector<std::tuple<std::chrono::duration<long long int, std::ratio<1ll, 1000000ll> >, std::chrono::duration<long long int, std::ratio<1ll, 1000000ll> >, std::chrono::duration<long long int, std::ratio<1ll, 1000000ll> > > >::push_back(std::tuple<long long int, long long int, long long int>&)'
     list.push_back(durations);
Run Code Online (Sandbox Code Playgroud)

我试图在这里搜索std::chrono::microseconds和其他std::chrono::duration东西,但没有成功纠正问题.

我知道这与我对类型系统的疏忽有关,但是我无法找到那个错误.任何帮助将不胜感激,这里是ideone 链接.

#include <iostream>
#include <chrono>
#include <vector>
#include <tuple>

using namespace std;
using namespace std::chrono;

void function()
{
    long long number = 0;

    for( long long i = 0; i != 2000000; ++i )
    {
       number += 5;
    }
}

int main()
{
    high_resolution_clock::time_point t1 = high_resolution_clock::now();
    high_resolution_clock::time_point t3 = high_resolution_clock::now();
    high_resolution_clock::time_point t5 = high_resolution_clock::now();
    function();
    high_resolution_clock::time_point t2 = high_resolution_clock::now();
    high_resolution_clock::time_point t4 = high_resolution_clock::now();
    high_resolution_clock::time_point t6 = high_resolution_clock::now();

    auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();
    auto duration2 = std::chrono::duration_cast<std::chrono::microseconds>( t4 - t3 ).count();
    auto duration3 = std::chrono::duration_cast<std::chrono::microseconds>( t6 - t5 ).count();

    auto durations = std::make_tuple(duration1,duration2,duration3);

    std::vector<std::tuple<std::chrono::microseconds,std::chrono::microseconds,std::chrono::microseconds>> list;
    list.push_back(durations);

    cout << duration1 << " -- "<< duration2 << " -- "<< duration3 << " -- ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ely 5

您已经创建了一个包含3个整数的元组,并且您尝试将其添加到3个持续时间的向量中.

我对它们各自进行差异b/w导致3个差异,并将它们auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();关于微秒.

为什么要count()duration_cast转换为微秒后调用持续时间?

只需将值保存为microseconds对象,就可以将它们添加到向量中:

auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 );
auto duration2 = std::chrono::duration_cast<std::chrono::microseconds>( t4 - t3 );
auto duration3 = std::chrono::duration_cast<std::chrono::microseconds>( t6 - t5 );
Run Code Online (Sandbox Code Playgroud)