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

 Здравствуйте, гость ( Вход | Регистрация )   Скачать форум | Поиск по Форуму | Участники | Помощь
 Поиск по:   сайтy   
   архиву форума   
  ОтветитьНовая темаНовый опрос
Помогите разобраться с контенерами, vector<string>
« предыдущая тема | следующая тема » Подписаться на тему | Отправить тему на E-mail | Распечатать тему
Игорюха
Отправлено: 20.02.2007, 16:27 Цитировать


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


Группа: Участник
Сообщений: 13
Пользователь № 4327
Регистрация: 15.02.07



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


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


Группа: Участник
Сообщений: 13
Пользователь № 4327
Регистрация: 15.02.07



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

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

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

Отредактировано Игорюха - 20.02.2007, 22:02
 
Послать сообщение E-mail адрес  Top
olegenty
Отправлено: 21.02.2007, 08:56 Цитировать


Ветеран


Группа: Модератор
Сообщений: 2412
Пользователь № 507
Регистрация: 13.02.04



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

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

--------------------
Управлять можно лишь тем, что можно измерить.
Восточная мудрость.
 
Послать сообщение E-mail адрес ICQ  Top
kertio
Отправлено: 21.02.2007, 12:30 Цитировать


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


Группа: Участник
Сообщений: 2
Пользователь № 4463
Регистрация: 21.02.07



На сколько я знаю 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() );/*...*/
 
Послать сообщение E-mail адрес ICQ  Top
kertio
Отправлено: 21.02.2007, 12:32 Цитировать


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


Группа: Участник
Сообщений: 2
Пользователь № 4463
Регистрация: 21.02.07



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


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


Группа: Участник
Сообщений: 13
Пользователь № 4327
Регистрация: 15.02.07



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;
 }
 
Послать сообщение E-mail адрес  Top
olegenty
Отправлено: 21.02.2007, 13:48 Цитировать


Ветеран


Группа: Модератор
Сообщений: 2412
Пользователь № 507
Регистрация: 13.02.04



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, которая в свою очередь обладает оператором [].

--------------------
Управлять можно лишь тем, что можно измерить.
Восточная мудрость.
 
Послать сообщение E-mail адрес ICQ  Top
6 ответов с: 20.02.2007, 16:27 Подписаться на тему | Отправить тему на E-mail | Распечатать тему

Back to Вопросы программирования в C++Builder
ОтветитьНовая темаНовый опрос