如何才能将字符串复制到带有 std::string 字段的结构中
How can I std::copy a string to a struct with the std::string fields
我从一个文件中读取了很多记录到一个std::vector中,如下所示:
std::fstream in("storage.txt", std::ios::in);
stxxl::vector<Citizen> v;
std::copy(std::istream_iterator<Citizen>(in), std::istream_iterator<Citizen>(), std::back_inserter(v));
结构Citizen
定义为:
struct Citizen
{
std::string firstname, lastname;
int year;
};
该函数是为isteam_iterator
创建的:
std::istream& operator >>(std::istream& i, Citizen& c)
{
i >> c.firstname >> c.lastname >> c.year;
return i;
}
在创建第一个结构期间,我遇到了分段错误。为什么?我知道,结构的字符串字段没有足够的空间。将类型更改为char fieldname[some size]
可以解决问题,但它是 C 样式,我不想使用它。
如何为该示例分配空间?
你在这里实际上并没有使用std::vector
:
stxxl::vector<Citizen> v;
正如 STXXL FAQ 中所述,stxxl::vector
只能使用 POD 类型进行参数化。 std::string
不是 POD 类型,也不是任何将其作为成员的结构。
如果您没有充分的理由使用 stxxl::vector
,请使用 std::vector
。否则,只能使用 POD 类型,这可能意味着固定最大大小的 C 样式字符串。
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然