Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как выяснить размер числового массива?

Ответить
Настройки темы
C/C++ - Как выяснить размер числового массива?

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Изменения
Автор: mrcnn
Дата: 14-12-2008
Тип int

Ограничения:
1. Не используя глобальных переменных.
2. Вернуть из функции размер нельзя, т.к возвращается указатель на массив

Память под массив выделена динамически внутри функции.
Как выяснить размер массива за пределами функции?

И еще один вопрос: как грамотно добавить еще один элемент в конец массива, сохранив все предыдущие. Я копирую, возможно ли это сделать эффективнее?

Код: Выделить весь код
int* sum(int* n1,int sz1,int* n2,int sz2)
{
	int* result;
	int cnt_of_result;
	int sz_of_result = max(sz1,sz2);
	int tmp,vu,i,mn,cmp;

	result = new int[sz_of_result];
	cnt_of_result = 0;
	vu = 0;
	mn=min(sz1,sz2);
	cmp=compare(n1,sz1,n2,sz2);

	for (i=0;i < sz_of_result;i++)
	{
		if (i < mn)		
			tmp = n1[i]+n2[i]+vu;		
		else
		{
			if (cmp==1)			
				tmp = n1[i]+vu;
			else if (cmp==2)		
				tmp = n2[i]+vu;
		}		
		if(tmp>=1000)
			{
				tmp-=1000;
				vu = 1;
			}
			else
				vu = 0;		
		result[cnt_of_result]=tmp;
		cnt_of_result++;
	}	

	if (vu != 0)
	{
		
		int* cp;
		cp = new int[sz_of_result+1];
		for (i=0;i<sz_of_result;i++)
			cp[i]=result[i];			
		cp[cnt_of_result]=vu;		
		print(cp,sz_of_result+1);
		return(cp);
	}

	print(result,sz_of_result);
	return (result);
}

Отправлено: 13:10, 14-12-2008

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


скажу честно, код не смотрел. Но подскажу идею, куда копать (С++). Используй частичную сортировку. Код приведён скорее для демонстрации различных фичей стандартной библиотеки, чем шаблона partial_sort. Рабочий, проверял.
Код: Выделить весь код
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>
using namespace std;
//------------------------------------

int main()
{
    // расположив строчку и вектор здесь, мы позволяем программе реже
    // обращаться в менеджеру памяти, потому что эти контейнеры постепенно
    // захватывают память по мере надобности и держат её на всякий случай.
    // освободить её можно либо уничтожив контейнер, либо выполнив хитрую операцию:
    // word_end.swap(string());
    // values.swap(vector<int>());
    string word_end;
    unsigned sort_limit = 0;
    vector<int> values;

    for (bool working=true; working;)
    {
        cout << "\nEnter values separated with spaces and \"end\" at the end:\n";

        // ввод данных
        copy(istream_iterator<int,char>(cin), istream_iterator<int,char>(), back_inserter(values));

        // слово end - не целое число, поэтому поток будет помечен как ios::failbit
        if (!cin.eof() && !values.empty())
        {
            // снимаем эту пометку, проверяем что ввели хотя бы один элемент
            cin.clear(ios::goodbit);

            // убедились что именно слово end на конце, сняли слово из потока
            if ((cin >> word_end) && word_end=="end")
            {
                // ввод и проверка границ для sort_limit
                // помним, что в си нумерация идёт с нуля, и что -1 = 0xffffffff для unsigned int
                while ((cout << "Enter sort limit: ") &&
                        (cin >> sort_limit) &&
                        (values.size() <= (sort_limit - 1)))
                {
                    cout << "an unsigned integer value between 1 and " << values.size() << " expected\n";
                }

                // если удалось прочитать sort_limit и пройти цикл проверки диапазона
                if (cin.good())
                {
                    // делаем частичную сортировку
                    vector<int>::iterator middle(values.begin() + sort_limit);
                    partial_sort(values.begin(), middle, values.end());

                    // вывод результата
                    cout << sort_limit << "-th value is: " << *(middle - 1) << "\n";

                    // для отладки - можно закомментировать,
                    // а можно и посмотреть, как работает partial_sort
                    cout << "debug: ";
                    copy(values.begin(), values.end(), ostream_iterator<int,char>(cout," "));
                    cout << "\n";
                }
                else
                {
                    // не ввели sort_limit
                    cout << "input aborted\n";
                }
            }
            else
            {
                // пустой список или слово не end (например exit)
                cout << "program aborted\n";
                working = false;
            }

            values.clear();
        }
        else
        {
            // нет слова end в потоке - поток кончился.
            cout << "unexpected end of input; program aborted\n";
            working = false;
        }
    }

    return 0;
}
//------------------------------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:14, 19-12-2008 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как выяснить размер числового массива?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как присвоить элементы массива в "перетасованном" виде другому массиву? evg64 AutoIt 3 27-09-2009 14:09
Как передать в javascript данные массива, полученного из кода на php vagner_HATE Вебмастеру 1 18-06-2009 13:51
Как просмотреть винт, вытащенный из Raid массива? evash Непонятные проблемы с Железом 11 06-02-2009 09:50
Мой комп шпионят (скрины, keylog). Как выяснить? GEugene Защита компьютерных систем 8 02-12-2007 06:08
Сетевые диски как часть единого массива данных Urutseg Сетевые технологии 9 22-03-2006 17:08




 
Переход