Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/259: Рейтинг темы: голосов - 259, средняя оценка - 4.81
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351

Vector<string> в string

02.05.2019, 22:11. Показов 54796. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как преобразовать vector<string> в string?
C++
1
2
vector <string> test;
string str;
к примеру test в str
Думаю легко и я видимо не умею гуглить...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2019, 22:11
Ответы с готовыми решениями:

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

Не могу вставить элемент в second(vector) мультимапа. multimap<string, vector<string>>
#include &lt;iostream&gt; #include &lt;map&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;iterator&gt; int main() ...

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()?
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

40
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.05.2019, 22:18
C++
1
for(const auto& it : test) str += it;
2
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351
03.05.2019, 08:02  [ТС]
rikimaru2013, "const auto& it : test" могли бы вы объяснить что это значит
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
03.05.2019, 08:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <vector>
 
int main()
{
    std::vector <std::string> test;
    test.push_back("A");
    test.push_back("B");
    test.push_back("C");
    std::string str;
    str = test[0];
    
    std::cout<<str;
}
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
03.05.2019, 09:17
Antikl, эм, а ничего, что Вы не преобразовываете вектор в строку, а просто извлекаете с вектора первый элемент?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.05.2019, 16:52
Костыль на коленке:
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
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <list>
#include <memory>
using namespace std;
 
template< typename T, template<typename, typename> class Container >class ContainerTemplate:public Container<T, allocator<T>>
{
public:
  size_t inlet_whole_length(){
      size_t result(0);
          for(auto it: *this)
          {
              result+=it.size();
          }
      return result;
    }
 
 
  T  whole_inlet_containers2container()
  {
      T result;
      result.reserve(inlet_whole_length());    
      for(auto a:*this)result.insert(result.end(), a.begin(), a.end());
      return result;
  }
 
};
 
int main()
{
    ContainerTemplate<string , vector> vs{{"mam","pap","bro"}};
    for(auto a:vs)cout<<a<<' ';
    cout<<endl;
    cout<<vs.inlet_whole_length()<<endl;
    auto str= vs.whole_inlet_containers2container();
    cout<<str<<endl;
 
    ContainerTemplate<string , list> ls{{"mam","pap","bro"}};
    for(auto a:ls)cout<<a<<' ';
    cout<<endl;
    cout<<ls.inlet_whole_length()<<endl;
    str= ls.whole_inlet_containers2container();
    cout<<str<<endl;
 
    ContainerTemplate<vector<int> , vector> vi{{{1,2,3},{4,5}}};
    for(auto a:vi)
       for(auto c:a)cout<<c<<' ';
    cout<<endl;
    cout<<vi.inlet_whole_length()<<endl;
    auto int_sum= vi.whole_inlet_containers2container();
   for(auto a:int_sum)
       cout<<a<<' ';
   return 0;
}
2
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
03.05.2019, 19:07
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <string>
#include <numeric>
 
using namespace std;
 
int main()
{
    const vector<string> v{"Hello ", "mam", "pap", "bro"};
    cout << accumulate(v.cbegin(), v.cend(), string{}) << endl;
}
3
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.05.2019, 20:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 vector <string>v,v_TEST{"mam","pap","bro", "mam","pap","bro", "mam","pap","bro","mam","pap","bro"};
    const size_t cycles(10000);
    for(size_t i=0; i<cycles;++i)v.insert(v.end(),v_TEST.begin(),v_TEST.end());
 
    string str_TEST;
        auto start=clock();
        str_TEST=accumulate(v.cbegin(), v.cend(), string{});
        auto finish=clock();
        cout<<"whole result string length is "<<str_TEST.size()<<endl;
        cout<<"accumulate lasts "<<(finish-start)<<endl;
 
    str_TEST.clear();
        start=clock();
        ContainerTemplate<string , vector> vs_TEST{v};
        str_TEST= vs_TEST.whole_inlet_containers2container();
        finish=clock();
        cout<<"whole result string length is "<<str_TEST.size()<<endl;
        cout<<"strategy template lasts "<<(finish-start)<<endl;
notAll, если заранее не резервировать память то скорость в 1000 раз медленнее. У меня достаточно быстрая машина. Но может я где-то ошибся...
1
7 / 6 / 2
Регистрация: 17.03.2019
Сообщений: 11
04.05.2019, 00:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<string> vec = { "Hello", ", ", "world", "!" };
    string str;
    
    for(int i = 0; i < vec.size(); i++)
    str += vec[i];
    
    cout << str;
    
    return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.05.2019, 09:46
Denis513, вы демонстрируете умение писать. А попробуйте почитать. Вот 1 ответ (2-й пост в топике) :
Vector<string> в string
Решение краткое, но медленное. Для большого количества элементов (не говоря уже о большом количестве "больших" векторов), это расточительно. Тема стала популярной. Хочется её победно закончить, даже ценой демонстрации низкой интеллектуальной эффективности?
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
04.05.2019, 09:55
IGPIGP, хватит придираться. Каждый здесь (на форуме) может и, я считаю должен, продемонстрировать своё решение в тех вопросах, которые ему интересны. И не имеет значение, оптимальное решение или нет. Это не коммерческое программирование с высокопроизводительными алгоритмами, а всего лишь раздел "С++ для начинающих". Denis513, как-раз и начинающий, судя по его коду.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.05.2019, 11:00
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
IGPIGP, хватит придираться. Каждый здесь (на форуме) может и, я считаю должен, продемонстрировать своё решение в тех вопросах, которые ему интересны. И не имеет значение, оптимальное решение или нет. Это не коммерческое программирование с высокопроизводительными алгоритмами, а всего лишь раздел "С++ для начинающих". Denis513, как-раз и начинающий, судя по его коду.
Возможно вы и правы, про новичков, но писать копию и демонстрировать
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
своё решение
это не одно и то же самое.
Krokodil9798, тема почти килопросмотр. Это значит что от 100 до 300 читателей достаточны по уровню, чтобы написать что-то подобное. То есть, данный товарищ - такой, что ещё поискать.
Krokodil9798, если форум превратится в кучу, сами понимаете чего, это будет хорошо? Есть много тем без высокого рейтинга посещаемости и новичкам, в принципе, раздолье. Я тоже был новичком и находил темы, которые нуждаются в ответе, но оказались не интересны или были потоплены вниз по какой-то другой (мне тогда как новичку непонятной) причине.
Krokodil9798, и ещё. Давайте не будем указывать, что хорошо а что нет в тоне:
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
хватит
Это не прокатит.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
04.05.2019, 13:30
Цитата Сообщение от IGPIGP Посмотреть сообщение
Решение краткое, но медленное.
Это если предварительно не аллоцировать память как в вашем решении, только не выносить все в отдельный класс, а сделать на месте:
C++
1
2
3
    std::string R;
    R.reserve(std::accumulate(v.begin(),v.end(),std::size_t{0},
    [](std::size_t l,const std::string &s) {return l+s.size();}));
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.05.2019, 18:38
Цитата Сообщение от S_el Посмотреть сообщение
Это если предварительно не аллоцировать память как в вашем решении, только не выносить все в отдельный класс, а сделать на месте:
Проверьте по тесту. Я вечерком чуть позднее посмотрю.
Но на вскидку, - именно предварительное аллоцирование избавит от пересоздания и копирования при реаллоцировании.
Фраза похожа на
"Аллокация аллокаторов - дело рук самих аллокаторов".
зы в стратежке есть и некоторая общность. Там, даже не используя других стратегий (insert позволяет) можно работать с множеством контейнеров попарно таких как строки, вектора и списки.

Добавлено через 36 минут
Цитата Сообщение от S_el Посмотреть сообщение
C++
1
std::string R; R.reserve(std::accumulate(v.begin(),v.end(),std::size_t{0}, [](std::size_t l,const std::string &s) {return l+s.size();}));
А понял. Это вы так подсчитали общую длину. Это должно помочь в части скорости.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
04.05.2019, 18:49
Цитата Сообщение от IGPIGP Посмотреть сообщение
А понял. Это вы так подсчитали общую длину. Это должно помочь в части скорости.
Именно.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Там, даже не используя других стратегий (insert позволяет) можно работать с множеством контейнеров попарно таких как строки, вектора и списки.
insert позволяет, но я бы использовал push_back для вставки в конец, т.к. здесь только это и требуется.
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
04.05.2019, 18:54
Цитата Сообщение от IGPIGP Посмотреть сообщение
но писать копию
IGPIGP, Где Вы копию видите? Покажите мне, я что-то не наблюдаю.
IGPIGP, rikimaru2013 предложил цикл for, который появился в С++11, notAll - вариант с STL алгоритмом, Вы - вариант с резервированием памяти и STL алгоритмом, ну, а Denis513 - более универсальный вариант с циклом for, который скомпилируется в любой версии С++, а не в версии старше С++11 (какую предложил rikimaru2013), раз уж на то пошло.
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, данный товарищ - такой, что ещё поискать.
...
Цитата Сообщение от IGPIGP Посмотреть сообщение
если форум превратится в кучу, сами понимаете чего, это будет хорошо?
IGPIGP, Нет, не хорошо. Но учтите, что форум как-раз и существует, чтобы его "обитатели" могли помочь советом тем, кто в этом нуждается, будь то тема
Цитата Сообщение от IGPIGP Посмотреть сообщение
почти килопросмотр
или
Цитата Сообщение от IGPIGP Посмотреть сообщение
без высокого рейтинга посещаемости
Насколько я помню - это пока не запрещено Правилами форума.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Krokodil9798, и ещё. Давайте не будем указывать, что хорошо а что нет в тоне:
IGPIGP, тон обычный. Давайте не будем себе напридумывать того, чего нет.

Добавлено через 3 минуты
IGPIGP, да и задание для
Цитата Сообщение от IGPIGP Посмотреть сообщение
тема почти килопросмотр
какое-то тривиальное. Гуглится на раз-два.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.05.2019, 19:18
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
Давайте не будем
Это лучше чем
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
хватит
Я не любитель говорить о тоне. Только по необходимости.
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
, Где Вы копию видите?
Дело не в том, что видно. Дело в том, что не видно. Строка - не изменяемый объект (хотя это вопрос реализации и может иметь стратегию захвата похожую на вектор (по умолчанию), к примеру). Это значит, что при создании новой строки, память в куче перевыделяется, в неё копируется контент старой строки, удаляется старая строка. Посмотрите тест и время. Я там погорячился на счёт 1000. Цифры - 5000 и 40, примерно. То есть в сто двадцать пять раз.
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
Нет, не хорошо. Но учтите, что форум как-раз и существует, чтобы его "обитатели" могли помочь советом тем, кто в этом нуждается, будь то тема
Я в курсе, но не вижу смысла обсуждать, это в контексте происходящего. Тут или ясно или нет. Ни чем не могу помочь сверх того.

Добавлено через 16 минут
Цитата Сообщение от S_el Посмотреть сообщение
insert позволяет, но я бы использовал push_back для вставки в конец, т.к. здесь только это и требуется.
то есть строка - контейнер char и запушить можно лишь символ. А приходится добавлять строки. Не посимвольно же это делать. Оператор += хорош для суммирования чисел или семантически сходного, так как он работает с ссылкой, но в случае строк это самообман. Аккумулирующий алгоритм не станет работать там где нет перегруженного сложения (хотя надо проверить, не помню).
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
04.05.2019, 19:29
Цитата Сообщение от IGPIGP Посмотреть сообщение
Дело в том, что не видно. Строка - не изменяемый объект (хотя это вопрос реализации и может иметь стратегию захвата похожую на вектор (по умолчанию), к примеру). Это значит, что при создании новой строки, память в куче перевыделяется, в неё копируется контент старой строки, удаляется старая строка.
IGPIGP, Это понятно. Но Вы писали не об этом, а о том, что
Цитата Сообщение от IGPIGP Посмотреть сообщение
Возможно вы и правы, про новичков, но писать копию и демонстрировать
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
своё решение
это не одно и то же самое.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
04.05.2019, 19:30
Цитата Сообщение от IGPIGP Посмотреть сообщение
то есть строка - контейнер char и запушить можно лишь символ. А приходится добавлять строки. Не посимвольно же это делать.
А как иначе перенести строку из контейнера в другую строку? Только посимвольно и скопировать. Мы ведь хотим получить в результате одну строку, а не набор строк.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Аккумулирующий алгоритм не станет работать там где нет перегруженного сложения (хотя надо проверить, не помню).
Аккумулятор можно расширить, передав кастомную функцию сложения.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.05.2019, 20:48
Цитата Сообщение от S_el Посмотреть сообщение
А как иначе перенести строку из контейнера в другую строку? Только посимвольно и скопировать. Мы ведь хотим получить в результате одну строку, а не набор строк.
Копирование строк - вопрос реализации. Можно переносить машинными словами. Если слово 32 а чар - 8 то по четыре. Можно и круче но, это зависит от реализации. Посимвольно это не путь к победе.
Цитата Сообщение от S_el Посмотреть сообщение
передав кастомную функцию сложения.
для списка, например?
Можно же смотреть на вектор строк как на кучу куч преобразуемых в кучу. Тогда вектор списков целых -> вектор целых, а список векторов double -> список double. Не у всех есть такой оператор по определению.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2019, 20:48
Помогаю со студенческими работами здесь

Как перебрать все элементы в map<string, vector<string>>
Доброго времени суток. Решаю следующую задачу: В файле есть сведения об автомобилях: марка автомобиля, номер и фамилия владельца. ...

Вывод элементов map <string,vector<string>>
Доброго времени суток. Как можно вывести массив map &lt;string,vector&lt;string&gt;&gt; mp ? Могу только предположить, что нужно как-то...

Перенос данных c vector<string> в vector<double>
Необходимо перенести введенные данные в vector&lt;string&gt; в vector&lt;double&gt;, я реализовал это вот так: word.push_back(a); ...

Vector and string
#include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; int main(void) { vector&lt;string&gt; v(10); string st; ...

Vector в string
Какой самый удачный способ преобразовать вектор в строку?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru