wstring* arr, то *arr — первая строка в нём; (*arr)[0] — первый символ первой строки. Тут всё верно.vector<wstring>. В данном случае, подходит именно вектор, т.к. в строке может быть разное число слов.
namespace strings
{
using native_char = boost::filesystem::path::value_type;
using native_string = std::basic_string<native_char>;
namespace detail
{
inline void write(const std::string& string)
{
std::cout.write(string.c_str(), string.size());
}
inline void write(const std::wstring& string)
{
std::wcout.write(string.c_str(), string.size());
}
}
using fmt::format;
template <typename S, typename... Args>
void print(const S& format_str, Args&&... args)
{
const auto string = fmt::format(format_str, std::forward<Args>(args)...);
detail::write(boost::locale::conv::utf_to_utf<native_char>(string));
}
using boost::locale::conv::utf_to_utf;
using boost::locale::conv::from_utf;
using boost::locale::conv::to_utf;
using boost::locale::conv::between;
inline native_string to_native(const std::string& utf8)
{
return utf_to_utf<native_char>(utf8);
}
inline std::string from_native(const native_string& native)
{
return utf_to_utf<char>(native);
}
}
vector<Object> objects;
objects.emplace_back("models/tree.png", 600, 1000, 93, 178);
bool operator >(const triple& n) const
{
return c > n.c;
}using triple = std::tuple<int, int, int>;
vector<vector<pair<int, int>>>, где каждый внутренний vector<pair<int, int>> содержит рёбра, ведущие из вершины с соответствующим индексом, а каждая pair<int, int> - это пункт назначения и вес ребра.
tolower выдаёт сконвертированный символ, причём в виде int (о ужас!), его надо сразу вручную кастануть к char. Это то, что надо выводить.islower проверяет, является ли аргумент строчной буквой и возвращает тоже int (о ужас!), его надо сразу вручную кастануть к bool. Это то, что надо проверять в if.
this — это указатель на текущий объект. *this — это ссылка на текущий объект. Пример:class A {
public:
int x;
A(const A& other) = default;
A& operator=(const A& other) {
x = other.x;
return *this;
}
};
void test() {
A a(1); // a.x == 1
A b(2); // b.x == 2
A c(3); // c.x == 3
a = b = c;
// a.x == 3
// b.x == 3
// c.x == 3
}a = (b = c);. Итак, вначале b = c. Вызывается b.operator=(c). Там мы вначале присваиваем c.x (3) в b.x, затем (и это здесь самое главное!) возвращаем ссылку на b. Далее в a = (результат) объекту a присваивается та самая возвращённая ссылка на b, благодаря чего в a.x тоже оказывается 3.
std::vector<std::unique_ptr<object>> world;
auto terr = std::make_unique<Terrain>();
world.push_back(std::move(terr));world.push_back(std::make_unique<Terrain>());object& operator=(object&&) = delete;
virtual ~object() = default;
l1.push_back(report);, в список добавляется копия report. Содержимое l1 не имеет никакого отношения к report, report1, report2. Соответственно, когда вы будете изменять l1, естественно, переменные report* не будут меняться.l1.emplace_back(); (при необходимости, передайте туда параметры для конструктора Student). Далее: l1.back() вернёт вам ссылку на свежесозданного студента, и вы сможете его дозаполнить, если нужно. (Осторожнее со ссылкой, а то опять копию создадите :) )
string s = "abc";
unsigned int arr[mxN];unordered_set. Считать в него числа, потом пройтись по нему и смотреть, есть ли противоположное число.
operator< ищется через ADL. Нельзя определить оператор для чужих типов, и чтобы его подхватили алгоритмы. Предлагаю такое решение: вместо char искать свою структуру (её можно определить просто как struct с char), для которой определить сравнение так же, как ты это сделал с char.