Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Массив Использовать так ?


Автор: denes 28.4.2018, 00:53
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> array1(3);
    // инициализируем элементы вектора array1
    array1[0] = 4;
    array1[1] = 2;
    array1[2] = 1;
    vector<int> array2(3);
    // инициализируем элементы вектора array2
    array2[0] = 4;
    array2[1] = 2;
    array2[2] = 1;
    // сравниваем массивы
    if (array1 == array2) {
        cout << "array1 == array2" << endl;
    }
    return 0;
}
Так ?

Массивы содержат определенное количество элементов определенного типа. Чтобы компилятор мог зарезервировать требуемое пространство при компиляции программы, вы должны указать тип и количество элементов, которые будет содержать массив, когда он будет определен. Компилятор должен иметь возможность определить это значение при компиляции программы. Как только массив определен, вы используете идентификатор для массива вместе с индексом для доступа к определенным элементам массива. [...] массивы нуль-индексируются; то есть первый элемент находится в индексе 0. Эта схема индексирования указывает на тесную связь в С++ между указателями и массивами и правилами, которые язык определяет для арифметики указателя.

- Справочник по С++ Pocket Это знаю

Автор: xvr 28.4.2018, 13:23
Цитата(denes @  28.4.2018,  00:53 Найти цитируемый пост)
Так ?

Ну так. Или так (c++11):
Код

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> array1 = {4,2,1};
    vector<int> array2 = {4,2,1};
    // сравниваем массивы
    if (array1 == array2) {
        cout << "array1 == array2" << endl;
    }
    return 0;
}

Цитата(denes @  28.4.2018,  00:53 Найти цитируемый пост)
Массивы содержат определенное количество элементов определенного типа.

Не путайте встроенный в язык массив с шаблонным классом std::vector


Автор: _zorn_ 28.4.2018, 15:42
То что вы подразумеваете по массивом (квадратные скобки, верно ?), в C++ имеют разное значение. Они могут быть переопределены и т.п.
В чистом си следующие выражения эквивалентны. Если не знаете что такое указатели, самое время познакомится  smile 
Код

char *arr;
//и
char arr[];
...
arr[4]
//и
*(arr + 4)
//Идем дальше
int arr[];
...
*(arr + 1) //Или arr[1]. Возьмет 4 байта (с условием что int 4 байта конечно) по смещению *(char)arr+4


Автор: denes 1.5.2018, 01:08
классом std::vector Этого не понял можите обьяснить ?

Добавлено через 2 минуты и 52 секунды
Цитата(_zorn_ @ 28.4.2018,  15:42)
То что вы подразумеваете по массивом (квадратные скобки, верно ?), в C++ имеют разное значение. Они могут быть переопределены и т.п.
В чистом си следующие выражения эквивалентны. Если не знаете что такое указатели, самое время познакомится  smile 
Код

char *arr;
//и
char arr[];
...
arr[4]
//и
*(arr + 4)
//Идем дальше
int arr[];
...
*(arr + 1) //Или arr[1]. Возьмет 4 байта (с условием что int 4 байта конечно) по смещению *(char)arr+4

Так это не правильный код ?
Напишите где не точность ?
И в чем разница ?

Автор: _zorn_ 28.5.2018, 15:54
Ну std::vector должны быть какие то методы использования (типа push быть). Я не С++ программер. Стандартные вещи (для плюсов) могу не знать  smile 

Автор: denes 2.6.2018, 12:28
Цитата(_zorn_ @ 28.5.2018,  15:54)
Ну std::vector должны быть какие то методы использования (типа push быть). Я не С++ программер. Стандартные вещи (для плюсов) могу не знать  smile

Интиресно какие ?

Автор: _zorn_ 7.6.2018, 18:04
Это СВИНСТВНО заставлять человека искать за вас.

Поисковой запрос:
https://yandex.ru/search/?text=std%3A%3Avector%20push&lr=11406

Первая ссылка:
http://www.cplusplus.com/reference/vector/vector/push_back/

ЗЫ: Так же хз почему push_back  smile 

Автор: TheCalligrapher 9.6.2018, 04:32
Цитата(_zorn_ @ 28.4.2018,  15:42)
То что вы подразумеваете по массивом (квадратные скобки, верно ?), в C++ имеют разное значение. Они могут быть переопределены и т.п.
В чистом си следующие выражения эквивалентны. Если не знаете что такое указатели, самое время познакомится  smile 
Код

char *arr;
//и
char arr[];
...

Что имеется в в иду под "эквивалентностью выражений"

Код

char *arr;
//и
char arr[];


в "чистом си" - не ясно. Во-первых, это не "выражения", а объявления. Во-вторых, в общем случае они не эквивалентны. Единственный контекст в С, в котором эти объявления эквивалентны - это объявления параметров функции, да и то эквивалентность не полная.

Автор: denes 11.6.2018, 12:34
Цитата(_zorn_ @ 7.6.2018,  18:04)
Это СВИНСТВНО заставлять человека искать за вас.

Поисковой запрос:
https://yandex.ru/search/?text=std%3A%3Avector%20push&lr=11406

Первая ссылка:
http://www.cplusplus.com/reference/vector/vector/push_back/

ЗЫ: Так же хз почему push_back  smile

Стандартный шаблон обобщённого программирования языка Си++ std::vector<T> — реализация динамического массива переменного размера.

это ?

Добавлено через 1 минуту и 26 секунд
Цитата(TheCalligrapher @ 9.6.2018,  04:32)
Цитата(_zorn_ @ 28.4.2018,  15:42)
То что вы подразумеваете по массивом (квадратные скобки, верно ?), в C++ имеют разное значение. Они могут быть переопределены и т.п.
В чистом си следующие выражения эквивалентны. Если не знаете что такое указатели, самое время познакомится  smile 
Код

char *arr;
//и
char arr[];
...

Что имеется в в иду под "эквивалентностью выражений"

Код

char *arr;
//и
char arr[];


в "чистом си" - не ясно. Во-первых, это не "выражения", а объявления. Во-вторых, в общем случае они не эквивалентны. Единственный контекст в С, в котором эти объявления эквивалентны - это объявления параметров функции, да и то эквивалентность не полная.

В С круглые скобки предназначены для изменения приоритета выполнения операторов.

 Квадратные скобки предназначены для индексации массивов . Короче говоря, если имеется массив, то с помощью квадратных скобок можно обратиться к элементу массива. Например, в программе

 #include <stdio.h>

 char s[80];

 int main(void)
 {
 s[3] = 'X';
 printf("%c", s [3]);
 return 0;
 }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)