将带有时间戳的向量整数连接为C++中的字符串?

Posted

技术标签:

【中文标题】将带有时间戳的向量整数连接为C++中的字符串?【英文标题】:Concatenate vector integer with timestamp as the string in C++? 【发布时间】:2013-11-14 01:18:07 【问题描述】:

我正在尝试使用以下代码将当前时间戳(以毫秒为单位)与我在向量中的整数连接起来 -

基本上,我需要将timestamp.integer 作为字符串

struct timeval tp;
gettimeofday(&tp, NULL);
uint64_t ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;


struct timeval tp;
gettimeofday(&tp, NULL);
uint64_t ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;

std::vector<uint32_t> myvector;
for (uint32_t i=1; i<=5; i++) myvector.push_back(i);

std::cout << "myvector contains:";

for (std::vector<uint32_t>::iterator it = myvector.begin() ; it != myvector.end(); ++it) 
       string id = boost::lexical_cast<std::string>(ms)+"."+*it; // this line gives me exception?
       std::cout << ' ' << id;
       std::cout << '\n';

我希望打印出来的结果是这样的字符串 -

1384391287812.1
1384391287812.2
1384391287812.3
1384391287812.4
1384391287812.5

我得到的例外是 -

error: no match for âoperator+â in âstd::operator+(const std::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>](((const char*)".")) + it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*<int*, std::vector<int> >()â

【问题讨论】:

您需要将intvector 转换为string。既然您已经在使用lexical_cast,您不妨再次使用它。 【参考方案1】:

您想将it 迭代器引用的uint32_t 转换为字符串

   string id = boost::lexical_cast<std::string>(ms)+"."+ boost::lexical_cast<std::string>(*it); 

您不能简单地将整数附加到字符串,因为编译器正确地告诉您没有operator+(std::string&amp;, uint32_t)

【讨论】:

【参考方案2】:

鉴于您打印了这些值,我不会费心将它们连接成std::string:这只是在浪费 CPU 周期和相当多的周期!相反,我只是将数据转储到输出中:

for (std::vector<uint32_t>::iterator it = myvector.begin() ; it != myvector.end(); ++it) 
   std::cout << ms << '.' << *it << '\n';

如果您真的想获取该字符串,则需要先将*it 转换为std::string,然后再将其与另一个std::string 连接。请注意,使用 std::lexical_cast&lt;std::string&gt;(x) 可能不会太贵,但您仍应尽量减少其使用(尤其是当您尝试格式化更有趣的类型时):

std::string base(boost::lexical_cast<std::string>(ms) + ".");
for (std::vector<uint32_t>::iterator it = myvector.begin() ; it != myvector.end(); ++it) 
   string id = base + boost::lexical_cast<std::string>(*it);
   // ...

【讨论】:

以上是关于将带有时间戳的向量整数连接为C++中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 将大量向量转换为字符向量的最有效方法

将带有前导“0x”的十六进制字符串转换为C++中的有符号短字符串?

在 C++ 中将字符串转换为向量

C++——如何将一个字符串转换为多个整数?

从文本文件中读取整数并使用 C++ 将它们存储到向量中

带有向量作为键的 STL 映射