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

как сложить вектор с целым числом? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 14:26     как сложить вектор с целым числом? #1
Как к элементу вектора прибавить целое число??? Скажите плиз, очень нужно!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 14:26     как сложить вектор с целым числом?
Посмотрите здесь:

Проверить, является ли введенная с клавиатуры строка целым числом C++
C++ Как сложить два числа
C++ Как в программе сделать чтобы результат мог быть не целым ?
C++ как сложить 2 массива
C++ Заменить элементы побочной диагонали целым числом, введенным пользователем
Есть n-значное число нужно сложить сложить все его цифры C++
C++ Определить разность между наибольшим числом и наименьшим числом последовательности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 14:30  [ТС]     как сложить вектор с целым числом? #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int k1, k2, i;
int sum1=0, sum2=0;
 
for(i=0;i<stones.size();i++)
{
        if(sum1<=sum2)
        {     
                sum1+ =stones.at(i);// вот тут вот почему не работает stones.at(i) это вектор соответственно
                k1++;}
        else
        {    
                sum2+=stones.at(i);
                k2++;}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.11.2011, 17:31     как сложить вектор с целым числом? #3
может в stones ничего нет
k1 и k2 не инициализированы
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2011, 17:39     как сложить вектор с целым числом? #4
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
как сложить вектор с целым числом?
Ни как. Нельзя складывать вектора с числами, матрицы с векторами и булки с гвоздями. "У Пети 8 гвоздей и 4 булки, а у Васи 2 гвоздя и 5 булок. У кого больше?" Простите, чего больше? Булок? Гвоздей? Подзатыльников за попытку съесть булку, фаршированную гвоздями? Ран из-за того, что всё таки этой фигни наелся? Мозгов у того, кто не стал этого делать?
thick_int
Заблокирован
19.11.2011, 18:37     как сложить вектор с целым числом? #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Ни как. Нельзя складывать вектора с числами, матрицы с векторами и булки с гвоздями. "У Пети 8 гвоздей и 4 булки, а у Васи 2 гвоздя и 5 булок. У кого больше?" Простите, чего больше? Булок? Гвоздей? Подзатыльников за попытку съесть булку, фаршированную гвоздями? Ран из-за того, что всё таки этой фигни наелся? Мозгов у того, кто не стал этого делать?
Вопрос то звучал не про сложение с вектором, а с элементом вектора.
А как сложить, да очень просто, как складываются любые два числа.
Например,
C++
1
2
3
4
5
vector<int> myvec(10, 0);
//как то еще меняем значения векторов
//...
//Прибавляем, например 5 к компоненту вектора с индексом 2
mevec[2] +=5;
Дело в том, что для этой структуры данных выбрано крайне (ИМХО) неудачное название. Это в реальности не вектор, а несколько более удобный массив.
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 20:38  [ТС]     как сложить вектор с целым числом? #6
хоть один разумный ответ!! подскажи пожалуйста почему не работает , могу выслать код полность!
Мне кажется что проблема в том что у меня значение вектора шаблон
Bers
Заблокирован
19.11.2011, 20:40     как сложить вектор с целым числом? #7
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
Мне кажется что проблема в том что у меня значение вектора шаблон
телепатия подсказывает мне, что у тебя выход за пределы диапазона массива.
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 20:42  [ТС]     как сложить вектор с целым числом? #8
телепат!!! а аргументировать можешь свои ведения?
main.cpp
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
#include <cstdlib>
#include <iostream>
#include "method.cpp"
#include <fstream>
#include <iomanip>
using namespace std;
 
int main(int argc, char *argv[])
{
      
    ifstream input_file("file.txt"); // открываем файл с данными
    vector<selection<int> > stones; // Вектор элементов
    selection<int> e; //  структура
    while(!input_file.eof()) // перемещаем файлы в вектор
    {
      input_file>>e.x;
      stones.push_back(e);
    }
    create_lot(stones);
    arrange_lot(stones);
    arrange_bags(stones);
    for(int i=0; i<stones.size(); i++) // Вывод
      cout<<setw(3)<<stones.at(i).x<<endl;
    input_file.close();
  
    system("PAUSE");
    return EXIT_SUCCESS;
}
function.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef VIBOR
#define VIBOR
 
#include <vector>
 
using std::vector;
 
template<class T> void create_lot(vector<T>&);
template<class T> void arrange_lot(vector<T>&);
void arrange_bags(vector<T> &)
 
#endif
struct.h
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
#ifndef SELECTION
#define SELECTION
 
template<class T> 
struct selection{
  T x; // Ключ
    bool operator < (selection<T> e) // Функция сравнения
  {
     if(x < e.x)
        return true;
      else
        return false;
    
  }
int operator+(selection<T> e)
{   return (x+e.x);
                    }
bool operator <= (selection<T> e) // Функция сравнения
  {
     if(x <= e.x)
        return true;
      else
        return false;
    
  }
};
#endif
method.cpp
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "struct.h"
#include <vector>
#include <iostream>
using std::vector;
using std::cout;
using std::endl;
 
 
template<class T> 
void create_lot(vector<T> &stones) //создание массива весов камней
{
        cout<<stones.size()<<" Number of stones. They weigh:\n";
        for(int k=0;k < stones.size();k++);
}
 
template<class T> 
void arrange_lot(vector<T> &stones) //сортировка по убыванию
{
int i,j;
T temp;
 
for(i=0;i < stones.size()-1;i++)
        for(j=i+1; j < stones.size() ;j++)    
                if(stones.at(i) < stones.at(j))
                    {   temp = stones.at(i);
                        stones.at(i) = stones.at(j);
                        stones.at(j) = temp;  }
                        
}
template<class T> 
void arrange_bags(vector<T> &stones) //создает две кучи более близкие по размеру
{
int k1, k2, i;
T sum1, sum2;
sum1 =stones.at(0);
sum2 =stones.at(0);
//T bag1[stones.size()-1],bag2[stones.size()-1];
for(i=0;i<stones.size();i++)
{
        if(sum1<=sum2)
        {      // bag1[k1]=stones.at(i);
                sum1 =stones.at(i+sum1);
                k1++;}
        else
        {     //  bag2[k2]=stones.at(i);
                sum2+=stones.at(i);
                k2++;}
}
if(sum1/sum2 <=2)
{       cout<<"\n heap 1: ";
        for(i=0;i<k1;i++)
                //cout<<bag1[i]<<"  ";
        cout<<"\n weigh 1: "<<sum1<<endl;
        cout<<"\n heap2: ";
        for(i=0;i<k2;i++)
                //cout<<bag2[i]<<"  ";
        cout<<"\n weigh 2: "<<sum2<<endl;
}
else cout<<"more 2\n";
}
Bers
Заблокирован
19.11.2011, 20:53     как сложить вектор с целым числом? #9
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
телепат!!! а аргументировать можешь свои ведения?
Конечно могу: 99,9999% всех крушений в рантайме при работе метода вектора at() происходит по причине того, что метод бросил исключение, которое никто не обработал.

Исключение он бросает (если ты не в курсе), при попытке доступа к элементу вне допустимого диапазона.

Но вообще то, я не люблю включать режим телепатии.

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

Описание ошибки "что-то не работает" - это афигительно информативное описание. Ага.

Может хватит уже тупить то?
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 20:55  [ТС]     как сложить вектор с целым числом? #10
все понял=))) код просто лежал уже два дня!!! вот он.. если не сложно скажите мне в чем косяк!
Bers
Заблокирован
19.11.2011, 21:09     как сложить вектор с целым числом? #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(i=0;i<stones.size();i++)
{
           if(sum1<=sum2)
           {        // bag1[k1]=stones.at(i);
                      sum1 =stones.at(i+sum1); 
 
                //чему будит равняться индекс массива, 
                //когда i станет равным stones.size()-1 ?
 
 
                      k1++;}
           else
          {    //    bag2[k2]=stones.at(i);
                      sum2+=stones.at(i);
                      k2++;}
}
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 21:24  [ТС]     как сложить вектор с целым числом? #12
эээ. не пойму вопроса!
Bers
Заблокирован
19.11.2011, 21:26     как сложить вектор с целым числом? #13
Цитата Сообщение от Bers Посмотреть сообщение
sum1 =stones.at(i+sum1);
Обращение к элементу вектора видишь?

Ты этот код сам писал?
Ты вообще понимаешь, что тут происходит?

Ты осознаешь по какому индексу идёт обращение к элементу вектора?
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 21:27  [ТС]     как сложить вектор с целым числом? #14
это уже идет по моему версия "от безисходности"
должно быть так
C++
1
2
3
4
5
6
7
8
9
10
for(i=0;i<=stones.size();++i)
{
        if(sum1<=sum2)
        {      // bag1[k1]=stones.at(i);
                sum1+=stones.at(i);
                k1++;}
        else
        {     //  bag2[k2]=stones.at(i);
                sum2+=stones.at(i);
                k2++;}
Bers
Заблокирован
19.11.2011, 21:32     как сложить вектор с целым числом? #15
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
for(i=0;i<=stones.size();++i)
А вот здесь у вас последнее i в цикле будит равна size() вектора.

Тоесть, если вектор содержит всего 10 элементов, то на последней итерации цикла будит обращение к 10 элементу.

Я не знаю, ты вообще в курсе, или нет, но вектор это на самом деле массив. У него элементы индексируются с нуля, а не с единичке.

То есть, если в векторе 10 элементов, то они будит иметь индексы 0...9
Девятый - последний. Десятого уже нету.

А у тебя последняя i равна size()

у тебя идет обращение к элементу уже за пределами диапазона.
Ты считаешь это правильно? Так и должно было бы быть?
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 21:34  [ТС]     как сложить вектор с целым числом? #16
нет, каюсь...
тут понял ошибку... должно быть size()-1 верно?
но даже при таком условии дальit до сложения меня компилятор не пустит
Bers
Заблокирован
19.11.2011, 21:36     как сложить вектор с целым числом? #17
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
for(i=0;i<=stones.size();++i)
цикл должен обломаться когда i станет равной stones.size()-1
это значит что цикл должен обломаться когда i перестанет быть меньше stones.size()

Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
for(i=0;i<stones.size();++i)
Найди отличия
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 21:49  [ТС]     как сложить вектор с целым числом? #18
различные операции сравнения!!!
один идет до 10 например а второй до 9

Добавлено через 10 минут
Вы можете все таки сказать что сделать что бы нормально суммировал?
Bers
Заблокирован
19.11.2011, 21:53     как сложить вектор с целым числом? #19
покажи последний исправленный вариант
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2011, 21:53     как сложить вектор с целым числом?
Еще ссылки по теме:

Сложить попарно элементы массива, последний сложить с первым C++
C++ Вектор векторов с различным числом элементов в каждом внутреннем векторе
Сложить модули элементов строк матрицы и сформировать из них вектор V C++
Проверка является ли строка числом полностью числом или нет? C++
Проверить является ли строка целым отрицательным числом C++

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

Или воспользуйтесь поиском по форуму:
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
19.11.2011, 21:53  [ТС]     как сложить вектор с целым числом? #20
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
template<class T> 
void arrange_bags(vector<T> &stones) //ñîçäГ*ГҐГІ äâå ГЄГіГ·ГЁ áîëåå áëèçêèå ГЇГ® Г°Г*çìåðó
{
int k1, k2, i,sum1=0, sum2=0;
 
 
for(i=0;i<stones.size()-1;++i)
{
        if(sum1<=sum2)
        {      
                sum1=+stones.at(i);
                
                k1++;}
        else
        {   
                sum2=+stones.at(i);
                k2++;}
}
if(sum1/sum2 <=2)
{       cout<<"\n heap 1: ";
        for(i=0;i<k1;i++)
                //cout<<bag1[i]<<"  ";
        cout<<"\n weigh 1: "<<sum1<<endl;
        cout<<"\n heap2: ";
        for(i=0;i<k2;i++)
                //cout<<bag2[i]<<"  ";
        cout<<"\n weigh 2: "<<sum2<<endl;
}
else cout<<"more 2\n";
}
Yandex
Объявления
19.11.2011, 21:53     как сложить вектор с целым числом?
Ответ Создать тему
Опции темы

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