我处于声明vector<vector<string>>
的情况。在Windows上,我可以声明这样的结构像vector<vector<string>>v={{"me","you"}}
,但在Linux机器..只是错误,所以我必须在结构初始化后声明它,但如何,因为mystruct.vec[0]={"me","you"}
给我一个分段错误。任何请求?向量字符串向量的问题
回答
在GCC 4.7.2这个程序只是正常:
#include <vector>
#include <string>
#include <utility>
#include <iostream>
using ::std::vector;
using ::std::string;
using ::std::move;
vector<vector<string>> foo()
{
vector<vector<string>>v={{"me","you"}};
return move(v);
}
int main()
{
using ::std::cout;
cout << "{\n";
for (auto &i: foo()) {
cout << " {\n";
for (auto &o: i) {
cout << " \"" << o << "\",\n";
}
cout << " },\n";
}
cout << "}\n";
return 0;
}
它产生这样的输出:
$ /tmp/a.out
{
{
"me",
"you",
},
}
我想你问题是旧的编译器或者在代码中的其他位置有其他问题。
我用这个命令行编译:
$ g++ -std=gnu++0x -march=native -mtune=native -Ofast -Wall -Wextra vvstr.cpp
我的G ++给出了这样一个版本:
$ g++ --version
g++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
本页面告诉你哪个GCC的版本有哪些C++功能:
似乎是我的4.4.5(debian).. – siloan 2013-03-03 23:34:34
@siloan - 它看起来像在4.4中引入了初始化器列表。你确定你正在用'-std = gnu ++ 0x'或'-std = C++ 0x'标记编译吗? – Omnifarious 2013-03-03 23:38:38
是的,我正在编译该标志,并为此'std :: vector
如果您使用的是GCC,则需要支持此C++ 11初始化功能的版本,然后您需要告诉编译器在C++ 11模式下编译为-std=c++0x
标志(或=std=c++11
为4.7系列)。见this demo,与GCC 4.7.2编译:
#include <vector>
#include <string>
int main()
{
std::vector<std::vector<std::string>> v = {{"me","you"}};
}
- 1. 向量问题的向量
- 2. C++:向量问题向量
- 3. 如何访问(int和字符串向量)映射的向量
- 4. 指向字符串的指针向量
- 5. 多维向量字符串
- 6. 字符串反向问题
- 7. 在大字符串向量中查找较大的字符串向量
- 8. 字符串向量 - 变量更新
- 9. 声明向量的指针向量的字符串
- 10. 连接字符串/字符向量
- 11. 向量和字符串结构的向量不正确打印
- 12. 从输入文件填充向量的字符串向量
- 13. C++向量问题
- 14. 例外问题使用STL字符串和向量类
- 15. 从char向量复制元素到字符串向量
- 16. ANSI C:指向字符串字面量
- 17. 使用rapply从字符名称向量中的字符向量
- 18. 填充字符串的向量
- 19. 打印内容的字符串向量
- 20. 字符串的二进制向量
- 21. C++向量的字符串段错误
- 22. char *到字符串向量的列表
- 23. 初始化字符串值的向量
- 24. Win32 API的向量问题
- 25. std ::向带自定义分隔符的字符串向量
- 26. 向字符串捕获值的问题
- 27. 传递矢量字符和字符串向量函数
- 28. 向量中的字符串变量导致大量错误(WinMainCRTStartup)
- 29. R:which()函数在字符向量中找不到指定的字符串(向量DOES包含字符串)
- 30. 使用向量字符串刷新JTable
在windows和linux上可能有不同的编译器版本或编译器。请指定您正在使用的编译器,或者(对于解决方案),只需将linux盒升级到最新的编译器即可。 – 2013-03-03 23:14:29
这种初始化相对较新 - 它是C++ 11。并非所有编译器都提供对该标准的全面支持。 – dasblinkenlight 2013-03-03 23:14:57
在Windows上,我在linux上使用mingw和最新的gcc代码块。 – siloan 2013-03-03 23:20:50