我想寫一個程序有一個字符數組的向量,我有一些問題。字符數組的C++向量
char test [] = { 'a', 'b', 'c', 'd', 'e' };
vector<char[]> v;
v.push_back(test);
很抱歉,這已經是一個字符數組,因爲我需要能夠產生字符的名單,因爲我想獲得的輸出類似。
一個一個 A B 一個C 一個d A E B A B C
任何人都可以點我在正確的方向?
感謝
我想寫一個程序有一個字符數組的向量,我有一些問題。字符數組的C++向量
char test [] = { 'a', 'b', 'c', 'd', 'e' };
vector<char[]> v;
v.push_back(test);
很抱歉,這已經是一個字符數組,因爲我需要能夠產生字符的名單,因爲我想獲得的輸出類似。
一個一個 A B 一個C 一個d A E B A B C
任何人都可以點我在正確的方向?
感謝
您不能將數組存儲在向量中(或任何其他標準庫容器中)。標準庫容器存儲的內容必須是可複製和可分配的,而數組既不是這些。
如果你真的需要在一個向量中放置一個數組(你可能不需要 - 使用向量的矢量或者向量的字符串更可能是你所需要的),那麼你可以將數組包裝在一個結構中:
struct S {
char a[10];
};
,然後創建結構的一個矢量:
vector <S> v;
S s;
s.a[0] = 'x';
v.push_back(s);
數組如何不可複製或分配? – quantum231 2016-06-23 23:39:53
你需要
char test[] = "abcde"; // This will add a terminating \0 character to the array
std::vector<std::string> v;
v.push_back(test);
如果你的意思是讓字符而不是字符串矢量的載體,
std::vector<char> v(test, test + sizeof(test)/sizeof(*test));
表達sizeof(test)/sizeof(*test)
是計算數數組測試中的元素。
使用這個怎麼會push_back另一個測試實例添加到現有的矢量? – aHunter 2010-03-06 11:38:54
使用std::string
代替炭陣列
std::string k ="abcde";
std::vector<std::string> v;
v.push_back(k);
雖然這可能對此實現非常有效,但根據我的理解,std :: string實現不保證具有連續的內存存儲。如果有人使用它來接收流並使用這個解決方案,它*可能是一個問題。而且,如果你在流中有'NULL'字符,你會遇到std :: string的問題。 – enthusiasticgeek 2014-02-24 13:34:40
您可以使用boost::array做到這一點:
boost::array<char, 5> test = {'a', 'b', 'c', 'd', 'e'};
std::vector<boost::array<char, 5> > v;
v.push_back(test);
編輯:
或者你可以使用向量的向量,如下圖所示:
char test[] = {'a', 'b', 'c', 'd', 'e'};
std::vector<std::vector<char> > v;
v.push_back(std::vector<char>(test, test + sizeof(test)/ sizeof(test[0])));
可以存儲陣列中的向量但在2011年之後的C++版本中,字符數組更應該是字符串數據類型。但是您仍可以通過以下方式執行此操作:
char test [] = { 'a', 'b', 'c', 'd', 'e' };
vector<char> v;
for(int i=0;i<5;i++)
v.push_back(test[i]);
您可以直接定義一個字符類型向量,如下所示。
vector<char> c = {'a', 'b', 'c'};
vector < vector<char> > t = {{'a','a'}, 'b','b'};
忘記載體,只使用std :: string。然後你可以使用+ =向它添加更多的字符。 – Tronic 2010-03-06 11:50:12
我不需要添加字符,我需要先將字符更改爲數組中的下一個字符。 – aHunter 2010-03-15 21:28:15