我處於聲明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