當我在研究向量時,我注意到size()
應該給出向量中元素的個數,對吧?所以,當我發現C++沒有內置函數字符串split()
時,我決定做一個。問題是,vector.size()
顯示爲在代碼中示出的相同的值vector.capacity()
:C++向量大小和容量輸出相同的值
#include <iostream>
#include <algorithm>
using namespace std;
void split(string input, char chr, vector<string> list) {
string add;
string conv;
int size = 0;
for (int i = 0; i <= input.size(); i++) {
if ((input[i] != char(chr)) && (input[i] != 0)) {
conv = input[i];
add += conv;
}
else {
cout << list.size() << endl;
if (size <= list.capacity()) {
list[size] = add;
add = "";
size++;
}
}
}
}
int main() {
vector<string> list(6);
split("test1,test2", ',', list);
for (int i = 0; i < 2; i++) {
cout << list[i] << endl;
}
}
的輸出是這樣的:
6
6
<blank line>
<blank line>
而應該是這樣從我的理解:
1
2
test1
test2
編輯:如果這是重要的,我正在編譯與-std = C++ 11
代碼備註:您正在使用'std :: string',因此您應該包含''; ''也一樣; 「'list'」可能是一個變量(特別是一個向量)的錯誤名稱,特別是全局的'using namespace std;';你的'split'函數需要一個vector_by value_,所以'list [size] = add;'只修改'main'中定義的vector的局部_copy_,它真的是你想要的嗎? (如果沒有,那麼通過引用採取向量:'void split(/*...*/,vector &list){/*...*/}')。 –
另外''
是啊,我擡起頭,我需要使用&,並且不需要使用'我<= list.capacity()',因爲當它到達最後一個字母時,將不會有任何東西來清除最後一個內容通過觸發'input [i] == 0'將'add'加入'list [size]'中,除非我把它放在for循環之外,我現在可以做的就是考慮它。 – cellsheet