Форум программистов, компьютерный форум CyberForum.ru

Как stl контейнеры работают с объектами различных типов данных? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ инициализация по необходимости http://www.cyberforum.ru/cpp-beginners/thread1655466.html
Подскажите, пожалуйста, возможно ли инициализация по мере необходимости. То есть, когда не известно в начале сколько переменных будет, но в ходе выполнения программы появляются новые переменные. Например, я хочу подсчитать кол-во каждого символа в файле. Мне не известно какие символы там. То есть как-то так: А - 10 В - 5 ; - 2 и т.д Создается первая переменная, ей присваивается, допустим...
C++ Вычислить и вывести значение функции F Вычислить и вывести значение функции F: http://www.cyberforum.ru/cpp-beginners/thread1655437.html
C++ Перегрузка операторов С++
Здравствуйте, недавно начал изучать С++, до этого старался решать проблемы самостоятельно, но сейчас чето я туплю/не понимаю. Простоя программа которая считывает ФИО, и через перегрузку выводит. Проблема в том что пр компиляции происходит переполнение стека и выводит одно слово "Имя: " в большом количестве (смотри ссылку). Как правильно все сделать и в чем причина (так нельзя выводить...
C++ Выдать информацию о животном из списка, заданного файлом
Решите задачу: Исходный текстовый файл input.txt содержит строки с информацией об одном домашнем животном и состоит из четырех полей: имя владельца; вид животного(кот,собака и т.д.); кличка(может отсутствовать); возраст в годах. Все поля разделены запятыми, отсутствие клички обозначается двумя запятыми, стоящими подряд. Необходимо: - прочитать содержимое файла в один или несколько...
C++ Не работает конструкция if else http://www.cyberforum.ru/cpp-beginners/thread1655394.html
#include <iostream> using namespace std; void zeroSmaller(int&, int&); int main() { int number1, number2; setlocale(LC_ALL,"RUS"); cout << "Введите 2 числа: "; cin >> number1 >> number2; zeroSmaller(number1, number2);
C++ Разработать программу реализующую чтение и запись в типизированный файл Здраствуйте . Начал писать и в самом начале возникла проблема. Написана только одна функция . Нужно записать структуру в типизированный файл . Когда я жму ''1'' по-сути должна сработать функция но программа перерывается #include "stdafx.h" #include <fstream> #include <iostream> #include <vector> #include <string> using namespace std; //структура для типізованого struct student подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.02.2016, 12:09     Как stl контейнеры работают с объектами различных типов данных?
Цитата Сообщение от castaway Посмотреть сообщение
Вы, видимо, имеете в виду выравнивание, количество данных, расширения архитектуры и
Нет, я имел ввиду как раз оптимизации
Вот заглянул
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline _OI
    __copy_move_a(_II __first, _II __last, _OI __result) // это дергается из std::copy
    {
      typedef typename iterator_traits<_II>::value_type _ValueTypeI;
      typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
      typedef typename iterator_traits<_II>::iterator_category _Category;
      const bool __simple = (__is_trivial(_ValueTypeI) // очевидно для какой-то оптимизация
                         && __is_pointer<_II>::__value
                         && __is_pointer<_OI>::__value
                 && __are_same<_ValueTypeI, _ValueTypeO>::__value);
 
      return std::__copy_move<_IsMove, __simple,
                          _Category>::__copy_m(__first, __last, __result);
    }
это одна из реализаций __copy_move
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct __copy_move<_IsMove, true, random_access_iterator_tag>
    {
      template<typename _Tp>
        static _Tp*
        __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
        {
#if __cplusplus >= 201103L
      // trivial types can have deleted assignment
      static_assert( is_copy_assignable<_Tp>::value,
                     "type is not assignable" );
#endif
      const ptrdiff_t _Num = __last - __first;
      if (_Num)
        __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); // ВОТ!
      return __result + _Num;
    }
Как мы видим для тех типов, для которых можно сделать просто memmove оно делается.

Добавлено через 3 минуты
Кстати интересную штуку нашел, ForEveR недавно концепты упоминал, вот похоже уже используются
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename _II, typename _OI>
    inline _OI
    copy(_II __first, _II __last, _OI __result)
    {
      // concept requirements
      __glibcxx_function_requires(_InputIteratorConcept<_II>)
      __glibcxx_function_requires(_OutputIteratorConcept<_OI,
        typename iterator_traits<_II>::value_type>)
      __glibcxx_requires_valid_range(__first, __last);
 
      return (std::__copy_move_a2<__is_move_iterator<_II>::__value>
          (std::__miter_base(__first), std::__miter_base(__last),
           __result));
    }
 
Текущее время: 04:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru