C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите разобраться с контенерами, vector<string>
Игорюха
Отправлено: 20.02.2007, 16:27


Ученик-кочегар

Группа: Участник
Сообщений: 13



Как можно создать массив vector< string>(массив векторов), чтоб он был многомерным, и как его отсортировать по определнному полю? wink.gif ohmy.gif
Игорюха
Отправлено: 20.02.2007, 22:01


Ученик-кочегар

Группа: Участник
Сообщений: 13



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

пишу
.....................................
#include < vector>
..................
vector< string> s;

(цикл 1)
. (цикл 2)
. cout << s[i][j]; //сдесь ошибка... sad.gif(((
. (конец цикла 2)
cout << endl;
(конец цикла 1)

Отредактировано Игорюха — 20.02.2007, 22:02
olegenty
Отправлено: 21.02.2007, 08:56


Ветеран

Группа: Модератор
Сообщений: 2412



как непосредственно выглядит ошибка? вышел за границы индекса? ничего удивительного, хранящиеся в векторе строки разной длины.

кроме того, нет смысла бегать по символам строки, её можно отправить в cout целиком, то есть достаточно верхнего цикла.
kertio
Отправлено: 21.02.2007, 12:30


Ученик-кочегар

Группа: Участник
Сообщений: 2



На сколько я знаю vector это одномерный массив, тоесть доступ к нему возможен только как одномерному массиву.
Например:
#include
using namespace std;

vector _s;

s.push_back( "bla" );
s.push_back( "blablabla" );
s.push_back( "blabla" );
/*...*/
string _s1 = _s[0]; // _s1 = "bla"
/*...*/
поэтому и не работает конструкция с доступом ко элементу _s[i][j];
а сортировать можно функцией sort(), надо добавить
Пример:
#include
#include
using namespace std;

vector _s;

s.push_back( "bla" );
s.push_back( "blablabla" );
s.push_back( "blabla" );
/*...*/
sort(_s.begin(), _s.end() );/*...*/
kertio
Отправлено: 21.02.2007, 12:32


Ученик-кочегар

Группа: Участник
Сообщений: 2



ага... точно ученик — кочегар :-) нужны заголовочные файлы для примера 2 < vector> и < algorithm>
Надеюсь помог.
Игорюха
Отправлено: 21.02.2007, 13:14


Ученик-кочегар

Группа: Участник
Сообщений: 13



CODE
#include <vector.h>
#include <algorithm>
#define NR 7
#define NC 5
using namespace std;
/*...*/
int main()
{
 char buff[100];
 ifstream infile;
 infile.open("file.txt");
 vector<string> **s;
 s = new vector<string> *[NR];
 for (int i = 0; i<NR; i++){
   s[i] = new vector<string>[NC];
 }
 for (int i = 0; i<NR; i++){
   for (int j = 0; j<NC; j++){
     infile.getline(buff,sizeof(buff));
     s[i][j].push_back(buff);
   }
 }
 for (int i = 0; i<NR; i++){
   for (int j = 0; j<NC; j++){
     cout  << s[j];//если написанно так, то все работает нормально,
                          //но выдает какие-то цыфры которых там и в помине нет
   }
   cout << endl;
 }
olegenty
Отправлено: 21.02.2007, 13:48


Ветеран

Группа: Модератор
Сообщений: 2412



2 kertio — объясни, почему это работает smile.gif
CODE

   std::vector < std::string > vs;
   vs.push_back("1234");
   vs.push_back("5678");
   for (int i = 0; i < vs.size(); i++)
   {
       for (int j = 0; j < vs[i].length(); j++)
       {
           ShowMessage(vs[i][j]);
       }
   }

а работает это потому, что vector[i] возвращает string, которая в свою очередь обладает оператором [].

Вернуться в Вопросы программирования в C++Builder