Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
1

Vector subscript put of range

05.10.2018, 17:49. Показов 468. Ответов 13

Author24 — интернет-сервис помощи студентам
Программа которая должна длинное число разделять на блоки и складывать их в массив
C++
1
2
3
4
5
6
cin >> n1;
    for (i = n1.length() - soc; i >= 0; i -= soc, j++) {
        A[j] = stoi(n1.substr(i, soc));
    }
    if (i<0)
        A[j] = stoi(n1.substr(0, i + soc));
где soc - размер ячейки, i и j итераторы, А - вектор, в который записывается число
и вроде бы даже работает, но когда я решил переместить этот кусок кода в отдельную функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void set_num_in_arr(string n, vector<long int> A) {
    int i, j = 0;
    int soc = 6;
    
    for (i = n.length() - soc; i >= 0; i -= soc, j++) {
        A[j] = stoi(n.substr(i, soc));
    }
    if (i<0)
        A[j] = stoi(n.substr(0, i + soc));
}
 
int main () {
....
cin>> n1;
set_num_in_arr(n1, A);
}
программа вылетает с ошибкой vector subscript put of range
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2018, 17:49
Ответы с готовыми решениями:

Struct / Vector / Expression: vector subscript out of range
Добрый вечер. Имеется структура: struct Contact { public: string name; vector&lt;string&gt;...

Vector subscript out of range
Реализация карманной сортировки: #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; ...

Vector subscript out of range
int main() { srand( time(0) ); vector &lt;int&gt; m(10000); int i,n,c,max; while(i&lt;=10000) {...

vector subscript out of range
Доброго времени суток! Подскажите пожалуйста, где именно я ошибся, вроде не должен он за пределы...

13
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 17:59 2
Цитата Сообщение от TerribleVoice Посмотреть сообщение
и вроде бы даже работает
не работает. функция не причем.
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:07  [ТС] 3
почему?)

Добавлено через 2 минуты
Цитата Сообщение от _stanislav Посмотреть сообщение
не работает
она может работает неправильно, но она хотя бы не вылетает
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:13 4
Цитата Сообщение от TerribleVoice Посмотреть сообщение
почему?)
потому что vector subscript out of range
за пределы границ вектора выходишь.

Добавлено через 5 минут
и сам алгоритм у тебя не верный.
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:16  [ТС] 5
Цитата Сообщение от _stanislav Посмотреть сообщение
и сам алгоритм у тебя не верный.
ну про сам алгоритм я ничего сказать не могу, это первое что пришло в голову
но где я выхожу за пределы?
Миниатюры
Vector subscript put of range  
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:21 6
Цитата Сообщение от TerribleVoice Посмотреть сообщение
но где я выхожу за пределы?
если у тебя вектор нулевого размера, то есть если ты его вот так создал vector<long int> A то тут A[j] = stoi
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:25  [ТС] 7
Цитата Сообщение от _stanislav Посмотреть сообщение
вектор нулевого размера,
у него есть размер, просто он выше в коде объявляется
на скрине есть
C++
1
A(L)
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:29 8
TerribleVoice, вот рабочий вроде код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
void set_num_in_arr(string n, vector<long int>& A)
{
    std::size_t soc = 6;
    for (std::size_t i = 0; i < n.size(); i += soc)
        A.push_back(stoi(n.substr(i, soc) ) );
}
 
int main ()
{
    std::string n1;
    cin>> n1;
 
    vector<long int> A;
    set_num_in_arr(n1, A);
 
    return 0;
}
Добавлено через 2 минуты
можешь переделать под заданный размер вектора без push_back ?
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:30  [ТС] 9
блин рабочий код это супер классно, но хотелось бы все-таки понять почему ошибка возникает когда я использую функцию

Цитата Сообщение от _stanislav Посмотреть сообщение
можешь переделать под заданный размер вектора без push_back ?
могу офк
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:31 10
Цитата Сообщение от TerribleVoice Посмотреть сообщение
когда я использую функцию
у тебя он не с функцией не без функции не работает
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:32  [ТС] 11
да работает он без функции))) запускается, делит, выводит, все дела

просто в вашем алгоритме старшая группа становится с индексом 0, что не очень хорошо, потому что при ее переполнении придется думать, что-то переносить, двигать
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:37 12
Цитата Сообщение от TerribleVoice Посмотреть сообщение
да работает он без функции
твой алгоритм ведет себя по разному при разных длинах строки.

Добавлено через 33 секунды
Цитата Сообщение от TerribleVoice Посмотреть сообщение
просто в вашем алгоритме старшая группа становится с индексом 0
сделай реверс и не парся
0
0 / 0 / 0
Регистрация: 28.02.2018
Сообщений: 25
05.10.2018, 18:41  [ТС] 13
Цитата Сообщение от _stanislav Посмотреть сообщение
ведет себя по разному
только что проверил все остатки от деления длины на 6 (и 0 в том числе), все корректно

Добавлено через 2 минуты
Цитата Сообщение от _stanislav Посмотреть сообщение
сделай реверс и не парся
ну а так он будет последним индексом и места перед ним все равно не будет
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
05.10.2018, 18:58 14
Цитата Сообщение от TerribleVoice Посмотреть сообщение
ну а так он будет последним индексом и места перед ним все равно не будет
ага

Добавлено через 15 минут
TerribleVoice, вот так вроде работает, по тестируй.
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
void set_num_in_arr(string n, vector<long int>& A)
{
    int i, j = 0;
    int soc = 6;
    
    for (i = n.length(); i > soc; i -= soc, j++) {
        A[j] = stoi(n.substr(i - soc, soc));
    }
    if (i>0)
        A[j] = stoi(n.substr(0, i) );
}
 
int main ()
{
    std::string n1("12345678901234567890");
    //cin>> n1;
 
    vector<long int> A(256);
    set_num_in_arr(n1, A);
 
    return 0;
}
0
05.10.2018, 18:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2018, 18:58
Помогаю со студенческими работами здесь

Vector subscript out of range
Привет, друзья, у меня следующая проблема: if (!MeteorVec.empty()) { for (int i = 0; i &lt;...

Vector subscript out of range
Доброе утро, прочитал статью про векторы и решил создать один из них, однако при выводе он выдаёт...

Vector subscript out of range
Помогите пожалуйста, выводит такую ошибку , не пойму почему #include&lt;iostream&gt;...

Vector subscript out of range
Не понимаю что происходит, объясните пожалуста #include &quot;pch.h&quot; #include &lt;iostream&gt; #include...

Vector subscript out of range (push_back, a не [])
При попытке сделать push_back() вектору вылетает ошибка vector subscript out of range. Именно при...

Ошибка: Vector subscript out of range
Всю голову сломал, не вижу где ошибка...Выводит только первые 5 итераций, вместо 45... int...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru