c ++向量大小和容量输出相同的值

细胞片

在研究向量时,我注意到size()应该给出向量中元素的数量,对吗?因此,当我发现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初始化向量。它将在内部构造6个空元素,因此设置值0和1不会改变该值。

之所以只看到空白行,是因为您按值传递矢量,而不是通过引用拆分函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章