2014-12-07 3 views
1

Как вставить <char> массивов в <char*> векторах что-то вроде этого:Использование векторов в C++?

std::vector<char> ch; 
ch.push_back('H'); 
ch.push_back('e'); 
ch.push_back('l'); 
ch.push_back('l'); 
ch.push_back('o'); 

std::vector<char*> vec; 
vec.push_back(ch); 

но дает ошибку говоря: push_back() cannot convert parameter 1 from.... Так есть способ загрузки ch[] значения в vec[0] и по-прежнему использовать одну из моей функции, которая выполняет поиск для содержимого в векторе, например: vecf[] содержит содержимое файла в нем, я могу выполнить поиск по vecf[0]vecf[1]... для аналогичного содержимого, например, поиск текста "Hello" от "Hi, Hello..."?

Как мне сказали, что мой вопрос был неясен, так вот понятнее версия: Это можно сделать так:

char string[]="Hello World"; 
std::vector<char*> vec; 
vec.push_back(string); 
cout<<vec[0]; 

затем, если строка имеет тип станд :: вектор, как это:

std::vector<char> string; 
std::vector<char*> vec; 
how would i do like this? 
vec.push_back(string); 

или что-то вроде этого, чтобы получить содержимое строки в VEC, а ч и VEC не в реальном проекте, я использовал термин ч и VEC для всего примера того, как сделать так, в мой проект представляет собой идентификатор векторной переменной char, который является чем-то вроде этого ID = "ID2" но в векторе значения идентификатора загружаются из файла, есть еще один тег, который содержит ссылочный идентификатор, который я буду сравнивать с ID [0]/ID [1], пока не будет найдено одно совпадение, я получу его позицию в массиве, то есть другая векторная переменная (int), которая содержит всю позицию узлов в массиве в файле, я буду использовать как этот SPos [ArrayPos], чтобы получить позицию узла в файле, надеюсь, что это было достаточно ясно ...

+4

Почему бы вам просто не использовать строку в C++? –

+0

Почему вы используете 'char *' в первую очередь? –

+0

Это действительно 'std :: string', который вы ищете, если вы хотите сохранить вектор по какой-либо причине, это' int len ​​= strlen (ch); std :: vector vec; vec.insert (vec.begin, ч, CH + LEN); '. О, и что вам не удалось, было преобразование из 'const char *' в 'char *' – PeterT

ответ

-1
std::vector<char*> vec; 

Это говорит о том, что vec является вектором char *.

Но вы пытаетесь вставить вектор. Здесь нет автоматического преобразования.

Предполагая, что вы действительно не хотите использовать строковый тип, вы хотели бы объявить

std::vector<std::vector<char> > vec; 
vec.push_back(ch); 

Пожалуйста, обратите внимание, что, если вы хотите, указатели вектора должны быть сохранены, вы должны иметь выделить ч в куче ,

+0

, но он по-прежнему дает ошибки, такие как «no operator defined для принятия операнда правой руки ...» при выполнении cout << vec [0]; Короче говоря, я хочу сделать так: получить содержимое ch в vec, потому что vec построен из указателей char и может содержать строки, такие как vec [0], и их можно легко просмотреть, но я хочу преобразовать char в char * указатели, ваш пример работает, но он не может выглядеть так: cout << vec [0], надеюсь, вы поймете –

+0

Это немного отдельная проблема. vec [0] приводит к вектору . «cout << vec [0]» не будет работать, поскольку такого метода нет. На основе ваших требований кажется, что вы хотите преобразовать вектор в строку или просто использовать тип строки напрямую. – KalyanS

Смежные вопросы