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

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

02.06.2017, 17:02. Просмотров 297. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

17
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
с++
296 / 288 / 154
Регистрация: 15.07.2015
Сообщений: 1,550
Завершенные тесты: 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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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

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

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

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


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

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

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