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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tapochka
40 / 40 / 8
Регистрация: 25.04.2014
Сообщений: 499
#1

Ошибка в std::copy не ясна - C++

14.07.2015, 01:33. Просмотров 412. Ответов 4
Метки нет (Все метки)

здравствуйте, есть следующий код, в котором возникает ошибка во время выполнения:
C++
1
2
3
std::string array1[5] = { "hello", "hello", "hello", "hello", "hello" };
std::string* arrayptr1 = static_cast<std::string*>(::operator new[](10*sizeof(std::string)));
std::copy(array1, array1+5, arrayptr1);
притом если заменить std::string на int например, то будет все работать. помогите...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 01:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в std::copy не ясна (C++):

Стандартный поток и STL (std::copy to std::cout) - C++
#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; #include &lt;string&gt; using namespace std; ...

std::copy - C++
typedef std::list&lt;size_t&gt; Path; Path::iterator _it; Path path; std::copy( _it, path.end(), std::ostream_iterator&lt;size_t&gt;( std::cout,...

Не получается использовать std::copy как memcpy? - C++
Получил задание переписать свою код: Поля x, y указывают координаты, куда должен быть помещен файл - кадр, а width, height ширину и...

Std::copy как скопировать часть строки массива byte? - C++
Вот из этой строки: BYTE pbHash; Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку: BYTE bAesKey; Так будет? ...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri - C++
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

std::copy из vector<double> в *double, непонятный warning - C++
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7, myvector.begin() ); std::copy (...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,624
Записей в блоге: 6
Завершенные тесты: 2
14.07.2015, 01:51 #2
У вас здесь написана чушь:
C++
1
std::string* arrayptr1 = static_cast<std::string*>(::operator new[](10*sizeof(std::string)));
Используйте std::vector
C++
1
2
3
4
std::string array1[5] = { "hello", "hello", "hello", "hello", "hello" };
std::vector<std::string> array;
array.resize(5);
std::copy(array1, array1+5, array.begin());
tapochka
40 / 40 / 8
Регистрация: 25.04.2014
Сообщений: 499
14.07.2015, 02:01  [ТС] #3
Cra3y, спасибо, но почему с int работает?

и, если можно, как сделать без вектора? просто сам пытаюсь реализовать вектор, полем данных является указатель на тип элементов

Добавлено через 7 минут
в принципе работает так:
C++
1
2
3
4
5
6
std::string array1[5] = { "hello", "hello", "hello", "hello", "hello" };
std::string* arrayptr1 = static_cast<std::string*>(::operator new[](10*sizeof(std::string)));
for (size_t i = 0; i < sizeof(array1) / sizeof(std::string); i++) {
    new(arrayptr1+i) std::string();
}
std::copy(array1, array1+5, arrayptr1);
но как то это не особо эффективно...
DrOffset
7102 / 4243 / 952
Регистрация: 30.01.2014
Сообщений: 7,025
14.07.2015, 08:56 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от tapochka Посмотреть сообщение
почему с int работает?
Потому что std::string - это класс и у его объектов должны быть вызываны конструкторы
Эта строчка
Цитата Сообщение от tapochka Посмотреть сообщение
static_cast<std::string*>(::operator new[](10*sizeof(std::string)))
только выделяет память под объекты, но не инициализирует их.

Цитата Сообщение от tapochka Посмотреть сообщение
в принципе работает так
А так написать не позволяют священные обеты?
C++
1
2
3
std::string array1[5] = { "hello", "hello", "hello", "hello", "hello" };
std::string* arrayptr1 = new std::string[10];
std::copy(array1, array1+5, arrayptr1);
Или даже так, коль хочется инициализировать память копированием:
C++
1
2
3
std::string array1[5] = { "hello", "hello", "hello", "hello", "hello" };
std::string* arrayptr1 = static_cast<std::string*>(::operator new[](10*sizeof(std::string)));
std::uninitialized_copy(array1, array1+5, arrayptr1);
Цитата Сообщение от tapochka Посмотреть сообщение
но как то это не особо эффективно...
Неэффективно - это держать начальные значения, заданные литералами, в массиве std::string.
tapochka
40 / 40 / 8
Регистрация: 25.04.2014
Сообщений: 499
14.07.2015, 22:35  [ТС] #5
DrOffset, от всей души благодарю за вариант с uninitialized_copy, сам его видел, но не додумался использовать

Цитата Сообщение от DrOffset Посмотреть сообщение
Неэффективно - это держать начальные значения, заданные литералами, в массиве std::string.
делаю свой вектор, поэтому и проверяю для всего что можно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 22:35
Привет! Вот еще темы с ответами:

Ошибка в std::cout<<std::endl - C++
есть следующая задача: -создать класс множество целых чисел. перегрузить операторы для следующих операций: Ввода/вывода, объединения двух...

Ошибка: отсутствует оператор ">>"; типы операндов: std::istream >> std::string - C++
Привет всем! Кто-нибудь объясните пожалуйста, что не так, что от меня компилятор требует?

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*') - C++
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; freopen(fileName, &quot;r&quot;, stdin); while...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc выделение памяти - C++
Уважаемые форумчане! Работаю над программой обработки WAV файлов, но возникла такая проблема: при чтении файла возникает ошибка ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2015, 22:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru