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

Узнать одинаковые ли массивы? - C++

Восстановить пароль Регистрация
 
AnreyKazakov
Заблокирован
11.09.2012, 15:50     Узнать одинаковые ли массивы? #1
Две программки, два массива, размерность обоих задается с клавиатуры (и как я понимаю раз задаются с клавиатуры до оба динамических) НО, один из них считается динамическим а второй нет, с чем это связано, или я неправильно трактую понятие динамического массива..... Вот их два кода...
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
int main(){
    using std::cout;using std::cin; using std::endl;
    int value;
    cout<<"Введите размерность массива"<<endl;
    cin>>value;
    int* p=new int [value];
    int k=1;
    for(int* q=p;q!=p+value;++q){*q=k;++k;}
    for(int* q=p;q!=p+value;++q){cout<<*q<<endl;}
    return 0;   
    }
и второй обычный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
int main(){
    using std::cout;using std::cin; using std::endl;
    int value;
    cout<<"Введите размерность массива"<<endl;
    cin>>value;
    int arr[value];
    int* p = arr;
    int k = 1;
    for(int* q=p;q!=p+value;++q){*q=k;++k;}
    for(int* q=p;q!=p+value;++q){cout<<*q<<endl;}
    return 0;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
11.09.2012, 15:53     Узнать одинаковые ли массивы? #2
C++
1
2
3
4
    int arr[value];
    cout<<"Введите размерность массива"<<endl;
    cin>>value;
    int arr[value];
Должна быть ошибка. Нельзя создать массив таким образом. Для инициализации таким способом value должно быть известно на этапе компиляции.
AnreyKazakov
Заблокирован
11.09.2012, 15:59  [ТС]     Узнать одинаковые ли массивы? #3
Плохо, у меня тупой MinGW хоть бы слово сказал =( работают на нем оба кода нормально, я х з как...
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
11.09.2012, 16:00     Узнать одинаковые ли массивы? #4
Цитата Сообщение от Andsteadur Посмотреть сообщение
C++
1
2
3
4
    int arr[value];
    cout<<"Введите размерность массива"<<endl;
    cin>>value;
    int arr[value];
Должна быть ошибка. Нельзя создать массив таким образом. Для инициализации таким способом value должно быть известно на этапе компиляции.
Вообщето последние версии g++ прекрасно это компилируют
AnreyKazakov
Заблокирован
11.09.2012, 16:02  [ТС]     Узнать одинаковые ли массивы? #5
Цитата Сообщение от pianist Посмотреть сообщение
Вообщето последние версии g++ прекрасно это компилируют
Значит можно забыть про "new [xx]" ? раз и так нормально компилируется....
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
11.09.2012, 16:13     Узнать одинаковые ли массивы? #6
тут такая тема... Я знаю, что это работает, но я не интересовался как. Возможно существуют подводные камни
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
11.09.2012, 16:15     Узнать одинаковые ли массивы? #7
Подобный код
C
1
2
int n;
int arr[n];
Это все происки C99.
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
11.09.2012, 16:17     Узнать одинаковые ли массивы? #8
Странно...

8.3.4 Arrays [dcl.array]
1 In a declaration T D where D has the form
D1 [ constant-expression-opt] attribute-specifier-seq-opt.
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
11.09.2012, 16:17     Узнать одинаковые ли массивы? #9
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Значит можно забыть про "new [xx]" ? раз и так нормально компилируется....
В общем, я бы не советовал этим пользоваться. new прекрасно работает.
Особенно, если хочешь, чтобы на других компиляторах отрабатывало.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
11.09.2012, 16:17     Узнать одинаковые ли массивы? #10
Говорю же, это C, а не C++ :-)
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.09.2012, 16:19     Узнать одинаковые ли массивы? #11
Значит можно забыть про "new [xx]" ? раз и так нормально компилируется....
ради переносимости забывать не стоит, на студии не скомпилируется
AnreyKazakov
Заблокирован
11.09.2012, 16:33  [ТС]     Узнать одинаковые ли массивы? #12
Да, подскажите зачем этот код в книжке, там не написано, чет не могу понять что он делает...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
#include <cstddef>
int main(){
    const char* pc="a very long literal string";/*определили массив из чаров*/
    const size_t len = strlen(pc+1);              /*спец переменная len равна длине строки*/
    for (size_t ix=0; ix!=1000000;++ix){         /*цикл от 0 до миллиона*/
        char *pc2=new char[len+1];           /*определили новый массив чаров*/
        strcpy(pc2,pc);                            /*скопировали строку в новый массив*/
        if (strcmp(pc2,pc))                        /*если две строки равны то....*/
        ;                                                /*Ничего! просто равны и все тут*/
        delete[] pc2;                                /*наверно, удалили массив pc2*/
        }
    std::cout<<"Успех!";                             /*это я дорисовал*/
    return 0;   
    }
Добавлено через 3 минуты
может тут показано как delete работает, кстати когда удаляешь строку delete[] pc2; производительность почти не снижается....
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
11.09.2012, 16:34     Узнать одинаковые ли массивы? #13
C++
1
const char* pc="a very long literal string";/*определили массив из чаров*/
Массив чар не определялся. Был определен указатель на const char, который был инициализирован указателем на константную строку.

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    const char* pc="a very long literal string";
    const char* p = "a very long literal string";
    if (pc == p)
       std::cout<<"same";
    return 0;   
}
http://liveworkspace.org/code/91b75d...6a3854fe77b2df
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 16:52     Узнать одинаковые ли массивы?
Еще ссылки по теме:

Узнать, все ли числа в массиве одинаковые C++
C++ Одинаковые элементы массива
C++ Одинаковые цифры в числах

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

Или воспользуйтесь поиском по форуму:
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
11.09.2012, 16:52     Узнать одинаковые ли массивы? #14
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
if (strcmp(pc2,pc)) /*если две строки равны то....*/
; /*Ничего! просто равны и все тут*/
Здесь в коментарии немного неправильно. Функция strcmp() возвращает 0 если строки равны.
Yandex
Объявления
11.09.2012, 16:52     Узнать одинаковые ли массивы?
Ответ Создать тему
Опции темы

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