Я працюю з великою кількістю розрахункового коду, написаного на C ++, з урахуванням високої продуктивності та низьких витрат пам'яті. Він використовує багато контейнерів STL (переважно vector) і переглядає ці контейнери майже у кожній окремій функції.
Ітераційний код виглядає так:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
але воно видає попередження про невідповідність між підписами та без знаків (C4018 у Visual Studio).
Заміна intна якийсь unsignedтип є проблемою, оскільки ми часто використовуємо прагми OpenMP, і для цього потрібен лічильник int.
Я збираюся придушити (сотні) попереджень, але, боюся, я пропустив якесь елегантне рішення проблеми.
На ітераторах . Я думаю, що ітератори чудові, якщо застосовувати їх у відповідних місцях. Код, з яким я працюю, ніколи не змінить контейнери з довільним доступом listабо щось інше (тому ітерація int iвже є агностичною для контейнера), і завжди буде потрібен поточний індекс. І весь додатковий код, який потрібно ввести (сам ітератор та індекс), просто ускладнює справи і затуманює простоту базового коду.
int.