当我研究 vector 时,我注意到 size()
应该给出 vector 中元素的数量,对吧?所以,当我发现 c++ 没有内置字符串 split()
函数时,我决定自己做一个。问题是,vector.size()
显示与 vector.capacity()
相同的值,如代码所示:
#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 进行编译
最佳答案
您使用大小 6 而非容量 6 初始化 vector 。它将由内部的 6 个空元素构成,因此设置值 0 和 1 不会改变它。
您只看到空行的原因是您按值而不是按对 split 函数的引用传递 vector 。
关于c++ vector 大小和容量输出相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548726/