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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alex_oo7
50 / 61 / 4
Регистрация: 18.10.2010
Сообщений: 240
#1

Странный глюк с вектором - C++

20.04.2012, 23:29. Просмотров 419. Ответов 9
Метки нет (Все метки)

Я определил операции:

Присвоения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool s;
std::vector<int> v;
void operator=(int get_i){      
        s = get_i < 0; // знак
        if(abs(get_i) >= 1000){
            v.resize(2);
            v[0] = abs(get_i % 1000);
            v[1] = abs(get_i / 1000);
        }else{
            v.resize(1);
            v[0] = abs(get_i); 
        }   
    }
Сравнения больше:
C++
1
2
3
4
5
6
7
8
9
10
11
bool operator >(big_integer& a, big_integer& b){
    if(a.s != b.s) { return b.s; }
    if(a.v.size() > b.v.size()) {return !a.s;}
    if(a.v.size() < b.v.size()) {return a.s;}
    for(int i = a.v.size(); i >= 0; i--){
        if(a.v[i] != b.v[i]){
            return (a.v[i] > b.v[i]) ^ a.s;
        }
    }
    return false;   
}
Проблема в том, что такой код возвращает 011, а должен 010

C++
1
2
3
4
5
6
7
8
9
10
11
big_integer a, b, c;    
    a = 100;
    b = 100;
    BOOST_CHECK(a > b);
    a = big_integer("100000000000000000000000000000000000000000000000000000");
    b = big_integer(                                                     "1");
    c = big_integer( "99999999999999999999999999999999999999999999999999999");  
    BOOST_CHECK(a - b == c);    
    a = 100;
    b = 100;
    BOOST_CHECK(a > b);
Операция минус выполняется верно и при дебаге она повлияла только на a.v.capacity()
Было 1 стало 18
Почему так может происходить ?
Неужели capacity как то влияет на результат ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странный глюк с вектором (C++):

Странный глюк цикла while - C++
Возник весьма странный глюк, связанный с циклом while. Имеется кусок программы: bool = true; while (bo=true){ ...

Странный глюк с биндом - C++
static void deXML(XMLBlock* RootBlock,Node* RN=NULL){ std::list&lt;boost::thread&gt; T; Node* SN=new...

Довольно странный и смешной глюк. (и очень непонятный.) - C++
Появился странный глюк. В точке 1 ввожу текст в структуру при помощи обычного cin. В точке 2 видно, что значение принято. В точке 3,...

странный "глюк" - C++
при опредедении следующего символьного массива: char с = &quot;abcde&quot;; ошибки нет. Всё понятно. Пять символов, плюс символ окончания строки...

Глюк печатания и глюк порчи константы - C++
Дамы и господа! Я столкнулся с двумя глюками, которые не нашёл в списке распространённых ошибок. 1) При попытке распечатать массив...

задание с вектором - C++
//напишите программу, где создается вектор из 10 элементов. При помощи итератора присвойте //каждому элементу значение, которое вдвое...

9
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,796
Записей в блоге: 17
21.04.2012, 02:26 #2
Абсолютно не понимаю..
Что это за объявление
C++
1
void operator=(int get_i){
Где оно находится? В классе? Тогда где описание класса?Покажите больше кода....
0
Alex_oo7
50 / 61 / 4
Регистрация: 18.10.2010
Сообщений: 240
21.04.2012, 16:47  [ТС] #3
Avazart, не нужно больше кода, ошибка в этом
C++
1
for(int i = a.v.size(); i >= 0; i--){
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
21.04.2012, 16:56 #4
Цитата Сообщение от Alex_oo7 Посмотреть сообщение
Avazart, не нужно больше кода, ошибка в этом
C++
1
for(int i = a.v.size(); i >= 0; i--){
У меня одногрупница тоже всегда говорит, что другая часть кода не важна, кидая лишь кусок. В 10/10 случаев все было именно наоборот.

Здесь форум не экстрасенсов, в другом вашем куске кода может быть написано что угодно и это может играть роль.
0
Fred2011
-1 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 22
25.11.2014, 11:02 #5
Возможно, я в состоянии ответить, но на уровне чайника.
У вектора какая-то аллергия на замену содержимого. Я лично для каждой ситуации с использованием вектора создаю новый вектор, например:

Считаю неправильным:
C++
1
2
vector <int> v;
for(int k=0; k<10; k++)v=function(a, b, c);
Рекомендую:
C++
1
2
3
4
5
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
25.11.2014, 11:06 #6
Fred2011, нужен код функции function().

Добавлено через 48 секунд
и пока непонятно для чего в цикле вызывается эта функция.
0
Тамика
Котовчанин
909 / 454 / 144
Регистрация: 16.02.2010
Сообщений: 3,100
Записей в блоге: 27
25.11.2014, 11:09 #7
Цитата Сообщение от Fred2011 Посмотреть сообщение
vector <int> v;
for(int k=0; k<10; k++)v=function(a, b, c);
На такие записи и у меня аллергия. Кто ж Вас так учил делать?..
Прочитайте что такое вектор и как его заполнять. И нижнее "письмо" к этому тоже относится.

Добавлено через 36 секунд
Цитата Сообщение от Fred2011 Посмотреть сообщение
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}
А тут сразу после фора Ваш вектор сгорит синим пламенем.
0
mss307
118 / 118 / 25
Регистрация: 14.12.2013
Сообщений: 352
25.11.2014, 11:09 #8
Цитата Сообщение от Alex_oo7 Посмотреть сообщение
big_integer
а это что за тип? это дефайн, typedef, структура или класс?
0
demmax2004
60 / 138 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
25.11.2014, 11:27 #9
Цитата Сообщение от Fred2011 Посмотреть сообщение
Рекомендую:
C++
1
2
3
4
5
for(int k=0; k<10; k++)
{
vector <int> v;
v=function(a, b, c);
}

Просто ужас
1
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
25.11.2014, 15:01 #10
Прошло 2.5 года...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2014, 15:01
Привет! Вот еще темы с ответами:

Работа с вектором - C++
Здравствуйте! Помогите, пожалуйста разобраться..я только изучаю язык. Как в данной программе реализовать графический интерфейс? Чтобы...

Работа с вектором - C++
Помогите разобраться что к чему, примеров найти не смог: Спасибо.

Работа с вектором - C++
Задание: Вектор В сформировать из целых случайных чисел в диапазоне . а) найти минимальный элемент вектора. б) найти произведение Р...

Вектор X(x1, x2,…, xn) заменить вектором Y(y1, y2,…, yn) - C++
Вектор X(x1, x2,…, xn) заменить вектором Y(y1, y2,…, yn) путем увеличения компонента с непарными номерами вдвое, а компонент с парными...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
25.11.2014, 15:01
Ответ Создать тему
Опции темы

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