что лучший способ распечатать строку-строку структуры, хранящуюся в векторе, я попытался получить строку с помощью const_iterator
вектора, но результатом являются только начальные значения, сделанные конструктором класса (пустые строки). заранее спасибо
#include <vector>
#include <string>
#include <iostream>
#include <cstdio>
class X
{
public:
std::string s1 , s2, s3 ;
X()
{
s1 = " " ;
s2 = " " ;
s3 = " " ;
}
};
void getstring(const char* msg , std::string storage)
{
std::cout << msg ;
std::getline(std::cin,storage) ;
}
int main()
{
std::vector<X>data ;
std::vector<X>::const_iterator it ;
int register_no ;
std::cout << "Enter Registers No. : " ;
std::cin>>register_no;
X temp ;
for (int i = 0 ; i < register_no ; i++)
{
getchar();
getstring("Enter s1 : " , temp.s1);
getstring("Enter s2 : " , temp.s2) ;
getstring("Enter s3 : " , temp.s3) ;
data.push_back(temp) ;
}
for (it=data.begin() ; it != data.end(); ++it)
{
//following code is not effective:
std::cout << (*it).s1 << std::endl ;
std::cout << (*it).s2 << std::endl ;
std::cout << (*it).s3 << std::endl ;
}
}
Попробуйте эту модификацию:
void getstring(const char* msg , std::string& storage)
{
std::cout << msg ;
std::getline(std::cin,storage) ;
}
Примечание: для параметра string используется ссылка для копирования в элемент. Если параметры не объявлены как ссылки, то параметр передается "по значению", что означает, что параметр копируется во внутреннюю часть функции, а когда функция возвращает параметр, стирается.
Вы передаете строку по значению для этого значения чтения - это хранилище в локальной переменной string метода getstring.
void getstring (const char * msg, std :: string & storage)
Рекомендуем также изменить (*it).s1
для it->s1
.
it->s1
over (*it).s1
?
getstring
, то естьstd::string &storage
.