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

Копирование строк - C++

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 09:50     Копирование строк #1
У Страуструпа приведен такой пример для копирования одной строки в другую:

C++
1
2
3
4
void cpy (char* p, const char* q) 
{ 
    while (*p++=*q++) ; 
}
А дальше написано что

Самый эффективный способ копирования строк с терминальным нулем на
вашей машине должна обеспечивать соответствующая стандартная библиотечная
функция:
C++
1
char* strcpy {char*, const char*);
Неужели стандартная библиотечная функция эффективнее? С трудом в это верится
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 09:50     Копирование строк
Посмотрите здесь:

Копирование Строк C++
C++ копирование строк
C++ Копирование строк
C++ копирование строк
C++ копирование строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 09:51     Копирование строк #2
Цитата Сообщение от BigLow Посмотреть сообщение
Неужели стандартная библиотечная функция эффективнее? С трудом в это верится
Почему?
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 09:55  [ТС]     Копирование строк #3
alsav22, ну а что может быстрее этого?
C++
1
2
3
4
void cpy (char* p, const char* q) 
{ 
    while (*p++=*q++) ; 
}
Здесь ничего лишнего нет, только один проход по строке до символа '\0'.
Не знаю, мне ничего лучшего в голову не приходит
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 10:04     Копирование строк #4
Цитата Сообщение от BigLow Посмотреть сообщение
ну а что может быстрее этого?
Может там так и сделано. Тут специалисты по компиляторам могут что-то сказать (оптимизация кода и пр.).

Добавлено через 2 минуты
Цитата Сообщение от BigLow Посмотреть сообщение
Здесь ничего лишнего нет, только один проход по строке до символа '\0'.
Например, в коде постфиксная инкрементация, а это создание дополнительного временного объекта.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 10:31  [ТС]     Копирование строк #5
Цитата Сообщение от alsav22 Посмотреть сообщение
в коде постфиксная инкрементация, а это создание дополнительного временного объекта.
что-то я не подумал сразу об этом )

Вот эта функция думаю должна быстрее работать
C++
1
2
3
4
5
6
void strCopy(char *p, const char *q)
{
    *p = *q;
 
    while (*++p = *++q) ;
}
никаких временных объектов
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.08.2013, 10:48     Копирование строк #6
Цитата Сообщение от BigLow Посмотреть сообщение
Вот эта функция думаю должна быстрее работать
Передайте туда пустую строку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 11:51     Копирование строк
Еще ссылки по теме:

C++ копирование строк
Используя функцию копирования строк, организуйте конкатенацію и копирование строк в четвертый массив, содержащий полные имена C++
Копирование строк C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 11:51     Копирование строк #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Передайте туда пустую строку
Если так?
C++
1
2
3
4
void strCopy(char *p, const char *q)
{
    if (*p = *q) while (*++p = *++q);
}
Yandex
Объявления
20.08.2013, 11:51     Копирование строк
Ответ Создать тему
Опции темы

Текущее время: 02:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru