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

标签 c++ string stdvector

当我研究 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/

相关文章:

c++ - 计算目录中具有给定扩展名的文件数 - C++?

c# - 一次读取一个字符串,3x3 个字符

java - 从字符串中提取标题 - Java

c++ - 删除 vector 而不删除数组

c++ - 为什么要重新分配 vector 拷贝而不是 move 元素?

c++ - 为什么我收到重新定义错误C++?

c++ - C++ 中的全局动态 Allcoated 变量

c++ - 程序在其中一种情况完成后终止,但其他情况则不会

c - C函数在char [] segfaults中交换两个char,尽管不使用字符串文字

c++ - 如何获取指向 2D std::vector 内容的指针