emplace_back做以下事情时,我认为这将是胜利者:
v.push_back(myClass(arg1, arg2));
Run Code Online (Sandbox Code Playgroud)
因为emplace_back会在向量中立即构造对象,而push_back首先会构造一个匿名对象,然后将其复制到向量中.有关更多信息,请参阅此问
我决定将它们与一个由整数填充的向量进行比较.
这是实验代码:
#include <iostream>
#include <vector>
#include <ctime>
#include <ratio>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main() {
vector<int> v1;
const size_t N = 100000000;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
for(size_t i = 0; i < N; ++i)
v1.push_back(i);
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
std::cout << "push_back took me " << time_span.count() << " seconds.";
std::cout << …Run Code Online (Sandbox Code Playgroud) 目前我使用此代码
string now() {
time_t t = time(0);
char buffer[9] = {0};
strftime(buffer, 9, "%H:%M:%S", localtime(&t));
return string(buffer);
}
Run Code Online (Sandbox Code Playgroud)
格式化时间.我需要添加毫秒,因此输出的格式为:16:56:12.321
如何在C++中以秒为单位获取系统的当前日期时间?
我试过这个:
struct tm mytm = { 0 };
time_t result;
result = mktime(&mytm);
printf("%lld\n", (long long) result);
Run Code Online (Sandbox Code Playgroud)
但我得到了:-1?
在Java中,您可以这样做:
long now = (new Date()).getTime();
Run Code Online (Sandbox Code Playgroud)
我怎么能用c ++做同样的事情?
我在unistd.h中找到了usleep函数,我认为在每个动作之前等待一段时间是有用的.但是我发现线程只是在它没有接收到任何信号时才会睡觉.例如,如果我按下一个按钮(我正在使用OpenGL,但问题是更具体的关于time.h和unistd.h),线程被唤醒,我没有得到我想要的.在time.h中,有一个sleep函数接受一个整数,但是一个整数太多了(我想等0.3秒),所以我使用了usleep.我问是否有一个函数需要花费时间(以毫秒为单位)(来自任何GNU或任何库).它应该像time()一样工作,但是返回毫秒而不是秒.这可能吗?