Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/64: Рейтинг темы: голосов - 64, средняя оценка - 4.55
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145

Копировать содержимое вектора в другой

21.02.2015, 00:47. Показов 12190. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан вектор из строк:
C++
1
vector <string> text_mas;
В каждой строке хранятся слова (через пробел или несколько пробелов). Нужно копировать каждое слово из исходного вектора в новый вектор, таким образом, чтобы в новом векторе в каждой строке было по одному слову. Кто может помочь с написанием кода?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2015, 00:47
Ответы с готовыми решениями:

Копировать содержимое одного указанного файла в другой указанный файл, дописывая, а не стирая его содержимое
Dragokas, Помогите пожалуйста с заданием! Задание 3. Написать командный файл, копирующий содержимое всех файлов, записанных в задании...

Копировать содержимое терминала в текстовый документ
Всем привет! Можно ли после выполнения каких-либо действий в терминале скопировать всё содержимое в текстовый файл при помощи команд...

Как правильно копировать и добавлять вектора?
Есть вектора vect1 и vect2, содержащие, допустим, значения double: using namespace std; vector&lt;double&gt; vect1, vect2;Как...

19
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
21.02.2015, 00:58
C++
1
2
3
4
5
6
7
vector<string>out_vector;
for(auto&src:text_mas)
{
    string word;
    for(stringstream stream(src);stream>>word;)
        out_vector.push_back(word);
}
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 01:12
Как вариант..
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
#include <iostream>
#include <vector>
#include <algorithm>
 
std::string getFirstWord(const std::string& str) {
    return str.substr(0, str.find(' ') + 1);
}
 
int main (int argc, char *argv[])
{
    std::vector<std::string> text_mas;
    std::vector<std::string> words;
 
    text_mas.push_back("foo bar lol");
    text_mas.push_back("lorem ipsum dolor");
    text_mas.push_back("sit amet");
    //...
 
    for(const auto str: text_mas)
        words.push_back(getFirstWord(str));
 
    for(const auto word: words)
        std::cout << word << std::endl;
}
Добавлено через 10 минут
Хотя да, что это я... Можно же проще
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 <vector>
#include <algorithm>
 
std::string getFirstWord(const std::string& str) {
    return str.substr(0, str.find(' ') + 1);
}
 
int main (int argc, char *argv[])
{
    std::vector<std::string> text_mas;
    std::vector<std::string> words;
 
    text_mas.push_back("foo bar lol");
    text_mas.push_back("lorem ipsum dolor");
    text_mas.push_back("sit amet");
    //...
 
    std::transform(text_mas.begin(), text_mas.end(), std::back_inserter(words), getFirstWord);
    
    for(auto s: words)
        std::cout << s << std::endl;
}
1
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 01:39  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Хотя да, что это я... Можно же проще
Не компилируется..
Кликните здесь для просмотра всего текста
Error 1 error C2039: 'back_inserter' : is not a member of 'std' c:\project1\project1\source.cpp 19
Error 2 error C3861: 'back_inserter': identifier not found c:\project1\project1\source.cpp 19
Error 3 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::basic_string<char,std::char_traits <char>,std::allocator<char>>' (or there is no acceptable conversion) c:\project1\project1\source.cpp 22
4 IntelliSense: namespace "std" has no member "back_inserter" c:\Project1\Project1\Source.cpp 19
5 IntelliSense: no operator "<<" matches these operands
operand types are: std::ostream << std::basic_string<char, std::char_traits<char>, std::allocator<char>> c:\Project1\Project1\Source.cpp 22


Добавлено через 3 минуты
Renji, аналогично, выдает ошибки при компиляции...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 01:45
Добавьте iterator к заголовочным файлам
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 01:53  [ТС]
KOPOJI, добавил. Вот что пишет:
Кликните здесь для просмотра всего текста
Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::basic_string<char,std::char_traits <char>,std::allocator<char>>' (or there is no acceptable conversion) c:\project1\project1\source.cpp 23
2 IntelliSense: no operator "<<" matches these operands
operand types are: std::ostream << std::basic_string<char, std::char_traits<char>, std::allocator<char>> c:\Project1\Project1\Source.cpp 23
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
21.02.2015, 02:04
Лучший ответ Сообщение было отмечено DISTURB как решение

Решение

Цитата Сообщение от DISTURB Посмотреть сообщение
Renji, аналогично, выдает ошибки при компиляции...
Добавьте #include<sstream>. Если не помогает, значит либо старый компилятор, либо в нем не включена поддержка C++11.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<vector>
#include<string>
#include<sstream>
using namespace std;
int main()
{
    vector <string> text_mas;
    vector<string>out_vector;
    for(auto&src:text_mas)
    {
        string word;
        for(stringstream stream(src);stream>>word;)
            out_vector.push_back(word);
    }
    return 0;
}
1
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 17:52  [ТС]
Renji, спасибо большое, действительно работает, не хватало заголовка.
Объясните пожалуйста, как работают циклы
C++
1
2
3
for(auto&src:text_mas)
...
for(stringstream stream(src);stream>>word;)
?
Условие не совсем понимаю..
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
21.02.2015, 18:05
for(auto&src:text_mas) - for each цикл перебирающий значения от *text_mas.begin() до *text_mas.end().

for(stringstream stream(src);stream>>word; ) - stringstream stream(src) преобразует текст в поток, stream>>word читает слово из потока, в качестве результата чтения возвращается сам поток, а этот поток в свою очередь преобразуется к логическому значению "ничего не сбойнуло". Соответственно, цикл крутится пока из потока есть чего прочитать.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 19:51
Цитата Сообщение от DISTURB Посмотреть сообщение
Error 1 error C2679: binary '<<'


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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
 
std::string getFirstWord(const std::string& str) {
    return str.substr(0, str.find(' ') + 1);
}
 
int main (int argc, char *argv[])
{
    std::vector<std::string> text_mas;
    std::vector<std::string> words;
 
    text_mas.push_back("foo bar lol");
    text_mas.push_back("lorem ipsum dolor");
    text_mas.push_back("sit amet");
    //...
 
    std::transform(text_mas.begin(), text_mas.end(), std::back_inserter(words), getFirstWord);
    
    for(const std::string s: words)
        std::cout << s << std::endl;
}
Так тоже не пашет?
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 20:03  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Так тоже не пашет?
Компилируется. Но на выходе вот что:
Кликните здесь для просмотра всего текста
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 20:04
Цитата Сообщение от DISTURB Посмотреть сообщение
Но на выходе вот что:
А что должно быть?) Все же верно.
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 20:08  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
А что должно быть?) Все же верно.
По идее должно быть всё, что вы кидали в конец вектора, то бишь
foo
bar
lol
lorem
ipsum
dolor
//etc.
Как-то так...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 20:10
Значит, я неверно понял задание.
Цитата Сообщение от DISTURB Посмотреть сообщение
В каждой строке хранятся слова (через пробел или несколько пробелов). Нужно копировать каждое слово из исходного вектора в новый вектор, таким образом, чтобы в новом векторе в каждой строке было по одному слову
Я думал, требуется именно только одно слово из каждой строки.
1
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 20:13  [ТС]
KOPOJI, в любом случае, спасибо за желание помочь)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 20:29
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
 
std::vector<std::string> getWords(const std::string& str)
{
    std::vector<std::string> words;
    std::size_t pos = str.find(' '); //find first space
 
    words.push_back(str.substr(0, pos)); //first word
    
    if(pos == std::string::npos && str.size()) //only 1 word, return it
        return words; 
 
    while(pos != std::string::npos) //search words
    {
        while(str[pos] == ' ') //skip spaces
            ++pos;
        words.push_back(str.substr(pos, str.find(' ', pos) - pos)); //add word
        pos = str.find(' ', pos); //search next space
    }
 
    return words;
}
 
int main (int argc, char *argv[])
{
    std::vector<std::string> text_mas;
    std::vector<std::vector<std::string>> words;
 
    text_mas.push_back("foo bar lol");
    text_mas.push_back("lorem ipsum dolor");
    text_mas.push_back("sit amet");
    //...
 
    std::transform(text_mas.begin(), text_mas.end(), std::back_inserter(words), getWords);
    
    for(std::vector<std::string> v: words)
        for(std::string s: v)
            std::cout << s << std::endl;
}
1
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
21.02.2015, 20:42  [ТС]
KOPOJI, спасибо. А не подскажете, зачем функции main аргументы в данном примере?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.02.2015, 20:43
DISTURB, да ни за чем, в общем-то. Просто привычка.
1
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
22.02.2015, 01:56  [ТС]
KOPOJI, понял, спасибо

Добавлено через 4 часа 50 минут
Цитата Сообщение от Renji Посмотреть сообщение
for(auto&src:text_mas) - for each цикл перебирающий значения от *text_mas.begin() до *text_mas.end().
Подскажите, знак & какую роль здесь играет? Или это не принципиально?

Просто запускал без амперсанда - работает точно так же. Может, подводные камни есть?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
22.02.2015, 13:08
& указывает что src будет ссылкой на значение массива. В противном случае получится копия значения, что во-первых медленнее (нужно копировать), во-вторых, не дает возможности менять массив.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2015, 13:08
Помогаю со студенческими работами здесь

Копировать файл и сохранить содержимое файла в .txt
Добрый день форумчане. у меня возникла проблема. Мне надо написать программу которая: 1. копирует из определенной папки в указанную папку...

Как правильно копировать содержимое кучи в массив?
Как правильно копировать содержимое кучи в массив? В каком порядке копировать элементы кучи?

Заменить содержимое одной строки на содержимое другой
Есть две строки символов: char* c =&quot;my string&quot; char c1=&quot;ssss&quot;; Нужно заменить &quot;string&quot; на содержимое c1. Как это...

Копировать содержимое блока div в текстовое поле input
Здравствуйте, уважаемые специалисты. Моя проблема заключается в том, что нужно скопировать из открытого модального окна содержимое div в...

Копировать содержимое одной очереди в другую (используя статический метод). Учебник Шилдта
Всем привет, В общем суть вопроса такова, его уже задавал как-то не так давно другой человкек на другом форуме но тот...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru