Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
#1

Как указать размер элементов вектора при создании ? - C++

02.06.2017, 17:02. Просмотров 247. Ответов 17
Метки нет (Все метки)

Доброго времени суток! Прошу помощи в следующем: Дано задание - ввести в строку с клавиатуры несколько слов (раздельных пробелом) и записать каждое слово в контейнер(в любой из STL). Но я столкнулся с проблемой размера каждого string элемента в векторе, так как размер каждого элемента будет ориентироваться на нулевой в векторе(возможно это только проблема векторов?).... Есть вариант с дополнительным созданием массива string и перезапись изначально туда(с манипуляциями по размеру), а затем resize каждого string элемента вектора и запись в них. Но хотелось бы узнать, возможно сразу задать размер каждого элемента в векторе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
        string s;
    getline(cin, s);
    Separate(s);
        return 0;
}
void Separate(string &s)
{
    vector<string> buf(5); //возможно ли здесь указать общий размер для всех элементов?
    for (int i = 0, j = 0; i < buf.size(); j += buf[i].length() + 2, i++)
    {
        buf[i] = s.substr(j, buf.find(' '));
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2017, 17:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как указать размер элементов вектора при создании ? (C++):

Выбивает при создании вектора
Мне нужно считать сначала, цифру означающую количество строк, в каждой из...

В чем ошибка при создании вектора организаций?
Подскажите в чем ошибка?? #include &lt;iostream&gt; #include &lt;vector&gt; using...

Размер вектора и вывод элементов
Объясните почему в функции print размер передаваемого вектора v.size()=0?...

Размер массива при создании экземпляра класса
Нет возможности использовать динамически выделяемую память под массив....

Как вывести размер вектора
Скажите, пожалуйста, что нужно добавить в код чтобы вывести размер вектора?...

Как изменить размер двумерного вектора?
Объявление у меня такое: std::vector&lt;std::vector&lt;std::size_t&gt;&gt; Data; ...

17
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 17:09 #2
Цитата Сообщение от Nubila Посмотреть сообщение
//возможно ли здесь указать общий размер для всех элементов?
Смысл это делать для std::string? Смысл, здесь, задавать размер вектора?
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 17:13  [ТС] #3
nd2, размер 5 там указан случайно.
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 17:14 #4
Цитата Сообщение от Nubila Посмотреть сообщение
размер 5 там указан случайно.
Смысл его вообще задавать?
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 17:16  [ТС] #5
nd2, у векторов же оптимизация размера, и когда я добавлю туда циклом 5 элемент , size там будет больше. или ошибаюсь?
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 17:19 #6
C++
1
2
3
4
5
6
7
8
void Separate(const string &s)
{
    vector<string> buf;
    stringstream ss(s);
    string temp;
    while (ss >> temp)
        buf.push_back(temp);
}
0
Antikl
с++
274 / 270 / 147
Регистрация: 15.07.2015
Сообщений: 1,480
Завершенные тесты: 6
02.06.2017, 17:22 #7
Цитата Сообщение от Nubila Посмотреть сообщение
nd2, у векторов же оптимизация размера, и когда я добавлю туда циклом 5 элемент , size там будет больше. или ошибаюсь?
у него размер на 1 больше и не нужно ему размер указывать так он сам определить а работать с ним можно как и с массивом
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 17:32  [ТС] #8
nd2, При const string&s выдало ошибку: Неразрешённый внешний символ. Если не string&s то работает. Возможно потому что создаётся temp при создании константной ссылки ?
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 18:18 #9
Цитата Сообщение от Nubila Посмотреть сообщение
При const string&s выдало ошибку: Неразрешённый внешний символ.
В прототипе функции (который я не вижу) измени на const.
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 18:37  [ТС] #10
nd2, можно ли как нибудь обойтись без string? Допустим использовать sstream изначально. Как записать в него из cin потока?
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 18:39 #11
Цитата Сообщение от Nubila Посмотреть сообщение
можно ли как нибудь обойтись без string?
Чем не устраивает?
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 18:45  [ТС] #12
nd2, лишний раз выделяю память на string. Пытался с помощью ss >> cin.rdbuf(); но там бесконечный ввод какой то получается.
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 18:47 #13
Цитата Сообщение от Nubila Посмотреть сообщение
Выделяю память на string.
Зачем?
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 18:50  [ТС] #14
nd2, )))))))))) ну в main'e string s. Я же могу просто вызвать функцию , и там уже сделать всё без строки(она не принципиальна ). Есть возможность из cin в sstream передать символы? Или сразу с клавы в sstream?
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 18:56 #15
Цитата Сообщение от Nubila Посмотреть сообщение
)))))))))) ну в main'e string s. Я же могу просто вызвать функцию , и там уже сделать всё без строки(она не принципиальна ).
Я не пойму, чем тебе string s в main() мешает?
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 19:04  [ТС] #16
nd2, хорошо. Представим что он не мешает. Я же просто спрашиваю , это возможно вообще?
0
nd2
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
02.06.2017, 19:27 #17
Не знаю такого.
0
Nubila
2 / 2 / 1
Регистрация: 24.03.2017
Сообщений: 59
02.06.2017, 20:45  [ТС] #18
nd2, понял. Спасибо большое за решение.
0
02.06.2017, 20:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2017, 20:45
Привет! Вот еще темы с решениями:

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

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b'...

Как объявить, что размер вектора равен нулю?
как объявить что размер вектора равен нулю? Компилятор говорит, что минимум 1...

Как установить размер вектора не заполняя его элементами?
Есть вот такой вот вектор vector&lt;vector&lt;Struct&gt;&gt; Vector_Struct;в ходе...


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

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

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