Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MEPTPAH
22 / 12 / 5
Регистрация: 07.08.2012
Сообщений: 109
#1

Длина short[] - Почему размер массива внутри make отличается? - C++

07.08.2014, 17:06. Просмотров 428. Ответов 6
Метки нет (Все метки)

Доброе время суток, господа.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
template <typename Container>
Container make(const short s[]) {
    short lenght = sizeof(s)/sizeof(short);
 
    cout << "size of argument: " << lenght << endl;
 
    return Container(&s[0], &s[lenght]);
}
 
int main()
{
    cout << "User reverse algorithm witch vector" << endl;
 
    short mShort[] = {1, 2, 3, 4, 5, 6};
 
    cout << "sizeof(short): " << sizeof(short)
         << "\nsizeof(mShort): " << sizeof(mShort)
         << "\nsizeof(mShort)/sizeof(short): " << sizeof(mShort)/sizeof(short) << endl;
 
    vector<short> sVector = make< vector<short> >(mShort);
 
    reverse(sVector.begin(), sVector.end());
    reverse(&mShort[0], &mShort[6]);
 
    vector<short>::const_iterator iter = sVector.begin();
 
    cout << "---OK---" << endl;
 
    for(int i = 0; i < 6; i++, iter++) {
        cout << "massive[" << i << "] : " << mShort[i] << "\t\tvector : " << (*iter) << endl;
    }
 
    cout << "---OK---" << endl;
 
    return 0;
}
Мой вывод:

Название: 40887578588558764131.png
Просмотров: 33

Размер: 3.1 Кб

Почему размер массива внутри make отличается?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2014, 17:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Длина short[] - Почему размер массива внутри make отличается? (C++):

Почему такой вывод (sizeof(short + short) - 4)
int _tmain(int argc, _TCHAR* argv) { short a = 3; short b = 5; cout &lt;&lt;...

Почему экзешник make.exe (вернее, его разновидность mingw32-make.exe) принимает неизвестные параметры?
Друзья! У меня есть одна из сборок mingw, а там, как известно файл make.exe...

Размер указателя short int
Доброе утро. Возник вопрос почему short int = 8 байт? Он же должен занимать 2...

Размер для данных (int, char, long, double, short, unsigned, float)
Напишите программу, которая будет определять размер для данных (int, char,...

Почему макс short int равен 65535?
Делаю sizeof() получаю 4 байта 1байт=8бит те 4байта=32 бита но бит это 0 или...

Почему размер символьного массива должен быть больше на 1 символ, а не на 2?
Привет! Пока читал учебник Шилдта, возник вопрос: Почему Герберт Шилдт...

6
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.08.2014, 17:12 #2
Лучший ответ Сообщение было отмечено MEPTPAH как решение

Решение

MEPTPAH, Ибо указатель. Перепишите на
C++
1
2
template <typename Container, size_t Size>
Container make(const short (&s)[Size])
1
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
07.08.2014, 17:15 #3
Цитата Сообщение от MEPTPAH Посмотреть сообщение
short lenght = sizeof(s)/sizeof(short);
Здесь sizeof(s) - размер указателя, а не массива.
Размер массива передавайте через дополнительный параметр функции
(ну или через шаблон, как предложено выше).
0
MEPTPAH
22 / 12 / 5
Регистрация: 07.08.2012
Сообщений: 109
07.08.2014, 17:34  [ТС] #4
Кликните здесь для просмотра всего текста
Цитата Сообщение от ForEveR Посмотреть сообщение
MEPTPAH, Ибо указатель. Перепишите на
Код C++
1
2
template <typename Container, size_t Size>
Container make(const short (&s)[Size])


используя массив short - работает без ошибок
а если заменить везде short на char с учетом вашего ответа - ситуация повторяется
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.08.2014, 17:38 #5
MEPTPAH, А можно конкретизировать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
template <typename Container, size_t Size>
Container make(const char (&s)[Size]) {
    size_t lenght = sizeof(s)/sizeof(char);
 
    cout << "size of argument: " << lenght << endl;
 
    return Container(&s[0], &s[lenght]);
}
 
int main()
{
    cout << "User reverse algorithm witch vector" << endl;
 
    char mShort[] = {1, 2, 3, 4, 5, 6};
 
    cout << "sizeof(char): " << sizeof(char)
         << "\nsizeof(mchar): " << sizeof(mShort)
         << "\nsizeof(mchar)/sizeof(short): " << sizeof(mShort)/sizeof(char) << endl;
 
    vector<char> sVector = make< vector<char> >(mShort);
 
    reverse(sVector.begin(), sVector.end());
    reverse(&mShort[0], &mShort[6]);
 
    vector<char>::const_iterator iter = sVector.begin();
 
    cout << "---OK---" << endl;
 
    for(int i = 0; i < 6; i++, iter++) {
        cout << "massive[" << i << "] : " << mShort[i] << "\t\tvector : " << (*iter) << endl;
    }
 
    cout << "---OK---" << endl;
 
    return 0;
}
6 и там и там. ЗЫ length вообще можно не считать, ибо Size сто процентов правильный.
0
MEPTPAH
22 / 12 / 5
Регистрация: 07.08.2012
Сообщений: 109
07.08.2014, 17:40  [ТС] #6
Цитата Сообщение от MEPTPAH Посмотреть сообщение
используя массив short - работает без ошибок
а если заменить везде short на char с учетом вашего ответа - ситуация повторяется
UPD: потому что в массиве char последний элемент: '\0' ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
template <typename Container, size_t Size>
Container make(const char (&s)[Size]) {
 
    short lenght = sizeof(s)/sizeof(char);
 
    cout << "size of argument: " << lenght << endl;
 
    return Container(&s[0], &s[lenght]);
}
 
int main()
{
    cout << "User reverse algorithm witch vector" << endl;
 
    char mShort[] = "legion";
 
    cout << "sizeof(short): " << sizeof(char)
         << "\nsizeof(mShort): " << sizeof(mShort)
         << "\nsizeof(mShort)/sizeof(short): " << sizeof(mShort)/sizeof(char) << endl;
 
    vector<char> sVector = make< vector<char> >(mShort);
 
    reverse(sVector.begin(), sVector.end());
    reverse(&mShort[0], &mShort[6]);
 
    vector<char>::const_iterator iter = sVector.begin();
 
    cout << "---OK---" << endl;
 
    for(int i = 0; i < 6; i++, iter++) {
        cout << "massive[" << i << "] : " << mShort[i] << "\t\tvector : " << (*iter) << endl;
    }
 
    cout << "---OK---" << endl;
 
    return 0;
}
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
08.08.2014, 00:16 #7
Не очень понял откуда sizeof(char) вылез, но стоит иметь в виду, что по Стандарту sizeof(char) равен 1 и не может быть другим.
0
08.08.2014, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2014, 00:16
Привет! Вот еще темы с решениями:

Undefined reference to Out32(short, short)
Всем привет.подскажите в чём может быть проблема?Сode::Blocks ос Win7x32. вроде...

Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию
1. Какие типы данных лучше всего использовать для хранения следующих значений:...

Определить, является ли символьный массив Short[5] подмассивом символьного массива Long[20]
Определить, является ли символьный массив Short подмассивом символьного массива...

short int и short
Какая разница, инициализирую я переменную как short int или же как short ?...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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