Извините, я думаю, что это может быть глупый вопрос. При попытке использовать cвремя для печати time_t внутри члена векторной структуры компилятор выдает мне эту ошибку argument of type "time_t" is incompatible with parameter of type "const tm *"
struct Trade_Record
{
std::time_t PASP;
};
std::vector<Trade_Record> Trade_Records;
for (std::vector<Trade_Record>::iterator begin = Trade_Records.begin(); begin != Trade_Records.end(); begin++)
{
std::cout << ctime(begin->PASP) << endl;
}
Как я могу напечатать time_t внутри члена векторной структуры? Спасибо!!
const tm *
? Это невозможно. Вы можете использовать asctime
.
@273K что именно невозможно?
Попробуй это:
std::cout << ctime(&begin->PASP) << std::endl;
Оно работает!! Большое спасибо!! Могу ли я еще спросить, почему & должен быть добавлен перед итератором? Из того, что я узнал из школы, векторный итератор «начало» — это указатель. Следовательно, какой эффект принесет добавление & перед «begin». Большое спасибо!!
> Из того, что я узнал из школы, векторный итератор «начало» — это указатель. Да, это указатель, он указывает на первый элемент вектора, а не на адрес PASP
, вы обращаетесь к первому элементу с помощью begin->PASP
. Поскольку сигнатура функции ctime
— char* ctime (const time_t * timer)
, ей требуется адрес вашего PASP
, &a
дает адрес a
.
Цитирую cppreference.com по этому поводу:
This function returns a pointer to static data and is not thread-safe. In addition, it modifies the static
std::tm
object which may be shared withstd::gmtime
andstd::localtime
. POSIX marks this function obsolete and recommends std::strftime instead.
The behavior may be undefined for the values ofstd::time_t
that result in the string longer than 25 characters (e.g. year 10000)
Вместо этого вы должны использовать strftime
:
#include <iostream>
#include <ctime>
int main() {
std::time_t t = std::time(nullptr);
char mbstr[100];
if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t))) {
std::cout << mbstr << '\n';
}
}
Выход:
Tuesday Tue May 17 07:51:34 2022
Отвечает ли это на ваш вопрос? векторная структура итератора С++