错误 C2679:二进制“<<”:未找到接受 'std::vector<char,std::allocator<char>>' 类型右手操作数的运算符

error C2679: binary '<<': no operator found which takes a right-hand operand of type 'std::vector<char,std::allocator<char>>'

我是 C++ 的新手,我遇到了错误:

error C2679: binary '\<\<': no operator found which takes a right-hand operand of type 
'std::vector\<char,std::allocator\<char>>' (or there is no acceptable conversion)

代码如下:

#include <iostream>
#include <random>
#include <vector>
using namespace std;

int main() 
{
    std::random_device rd;
    std::mt19937 gen(rd());

    int i = 0;
    while (i == 0) 
    {
        int password_length;
        cout << "How many characters do you want in the password: ";
        cin >> password_length;

        if (password_length == 0)
        {
            cout << "Bye...";
            break;
        }
        else if (password_length < 5 || password_length > 15)
        {
            cout << "Password must be between 5 and 15 characters." << endl << endl;
            return main();
        }

        int c = 0;
        int y = 0;
        int random_character_case;
        std::vector<char> values(password_length);
        for (int x = password_length; x > 0; x--) 
        {
            if (y == password_length - 2) 
            {
                random_character_case = 1;
            }
            if (c == 2) 
            {
                std::uniform_int_distribution<int> character_ascii_distr(2, 3);
                random_character_case = character_ascii_distr(gen);
            }
            else 
            {
                std::uniform_int_distribution<int> character_ascii_distr(1, 3);
                random_character_case = character_ascii_distr(gen);
            }

            switch (random_character_case)
            {
            case 1: {
                std::uniform_int_distribution<> numbers_ascii_distr(48, 57);
                char asciiValue = numbers_ascii_distr(gen);
                values.push_back(asciiValue);
                c++;
                break;
            }
            case 2: {
                std::uniform_int_distribution<> capital_ascii_distr(65, 90);
                char asciiValue = capital_ascii_distr(gen);
                values.push_back(asciiValue);
                y++;
                break;
            }
            case 3: {
                std::uniform_int_distribution<> lowercase_ascii_distr(97, 122);
                char asciiValue = lowercase_ascii_distr(gen);
                values.push_back(asciiValue);
                y++;
                break;
            }
            }
        }

        cout << values;
        values.clear();
        cout << endl << endl;
    }
}

尝试编写代码以用户输入的长度生成一组随机字符,其中混合了随机的小写和大写字符,以及在集合中随机位置的两个随机数字。

我想强调一下我很新;因此我也很期待看到更有效的方法去做我想做的事情,如果有的话。

在这一行

cout << values;

您正在尝试为 char 的向量调用 std::basic_ostream::operator<<(即 std::vector<char> values)。这没有定义,因此编译器不知道它。因此,错误。

您需要遍历 char 个向量的元素(即 values)。例如,使用基于范围的 for 循环:

for (const char ele : values)
    std::cout << ele << " ";

也就是说,您可以简单地使用标准中提供的 std::string instead of std::vector<char> for which you have already operator<<