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

Как выделяется память под массив string? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтения файла в динамический массив http://www.cyberforum.ru/cpp-beginners/thread650065.html
Добрый день. Файл состоит из 6 столбцов и миллионов рядков. Нужно прочесть все это в динамический массив, проблема заключается в том что файл весит очень много(больше 3 гб). Как можно осуществить подобное?
C++ Скопировать двумерный массив в vector Добрый день всем. подскажите пожалуйста, как скопировать двумерный массив в vector? int i = {0}; vector<vector<int> > _v; _v = i; // Не работает. Есть идеи? весь день колупаюсь. и copy делаю и всё что угодно, в итоге одни ошибки компилятора. Помогите плиз. http://www.cyberforum.ru/cpp-beginners/thread650029.html
Защита const C++
const Int& operator= (const Int& a) Отчего защищает первый const
C++ Определить, попадает ли точка с заданными координатами в область
Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную из рисунка серым цветом. Результат работы программы вывести в виде текстового со-общения. Параметр R вводится с клавиатуры
C++ Перписать из Си++ в ява http://www.cyberforum.ru/cpp-beginners/thread649907.html
Добрый день, помогите, пожайлуйста, переписать программу на ява. И, если не сложно, объясните в чем там ключевые различия. Заранее благодарен:) #include <iostream> #include <windows.h> using std::cout; using std::endl; using std::cin; inline char *rus( char *s ) // русский текст в консоли { char *t = new char; CharToOem(s,t);
C++ Найти обратную матрицу Здравствуйте, уважаемые программисты! Прощу помощи. Для заданной матрицы A(3,3), найти обратную А в -1 степени. Нужно ли самому в код вписывать свои значения матрицы? #include <iostream.h> #define I 3 #define J 3 main () подробнее

Показать сообщение отдельно
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
11.09.2012, 14:14     Как выделяется память под массив string?
Память резервируется по мере необходимости. Если памяти меньше чем необходимо для выполнения операции (например, при конкатенации), то происходит выделение памяти необходимого размера. В некоторых случаях для того, чтобы избежать многократных операций выделения памяти и копирования нужно использовать метод reserve. Вот небольшой синтетический пример, где можно избежать этих выделений и копирований:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main()
{
   string str;
   string appendStr = "string to append";
   const int APP_TIMES = 20;
   cout<<"New created string capacity: "<<str.capacity()<<'\n';
   
//  str.reserve(str.size() + APP_TIMES * appendStr.size());
//  cout<<"Reserved memory for elements. Capacity: "<<str.capacity()<<'\n';   
   
   for(int i = 0; i < APP_TIMES; ++i)
   {
      str += appendStr;
      cout<<"appending '"<<appendStr<<"' to str. capacity: "<<str.capacity()<<'\n';
   } 
      
   return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru