如何在vector <char>中显示特定项? (C ++)

时间:2017-06-02 02:03:20

标签: c++ vector

作为Tic-Tac-Toe游戏的一部分,我正在尝试创建一个填充数字1-9的字符向量。为什么以下代码不起作用?这只是完整代码的简化版本,所有这些都可能有点笨拙。这应该做我想要的吗?为什么不cout'0'?当我试图展示里面的内容时,它似乎是空的。我是否错误地填充了矢量?

是的,我知道using namespace std;很糟糕。

include <iostream>
include <vector>

using namespace std;

int main () {
    const int NUM_SQUARES = 9;
    vector<char> board(NUM_SQUARES);
    cout << board[0] << endl;
    return 0;
}

4 个答案:

答案 0 :(得分:2)

您的代码会打印向量的初始元素的内容,因此只需要将该字符放入该元素中即可。

您的代码将字符'\0'放在那里,这是不可打印的。如果您想打印字符数字,请将其放在矢量中:

vector<char> box(NUM_SQUARES, 'X');
cout << board[0] << endl; // prints X

Demo.

答案 1 :(得分:0)

因为你将它存储为char,就像

一样
char c=0;
std::cout << c;

不会打印任何内容。

如果您想展示0,则需要将其投放到int,即std::cout << (int)board[0];

答案 2 :(得分:0)

您构建的vector初始计数为9,但没有初始值,因此字符全部初始化为'\0'(0x00),而不是'0'(0x30)。您需要在显示之前填充vector,例如:

#include <iostream>
#include <vector>

int main () {
    const int NUM_SQUARES = 9;
    std::vector<char> board(NUM_SQUARES);
    for (int i = 0; i < NUM_SQUARES; ++i)
        board[i] = '0' + i;
    std::cout << board[0] << std::endl;
    return 0;
}

或者,在C ++ 11及更高版本中:

#include <iostream>
#include <vector>
#include <numeric>

int main () {
    const int NUM_SQUARES = 9;
    std::vector<char> board(NUM_SQUARES);
    std::iota(board.begin(), board.end(), '0');
    std::cout << board[0] << std::endl;
    return 0;
}

答案 3 :(得分:-2)

向量不是数组。您不需要事先预留内存空间。只需声明一个空向量,然后使用for循环填充所述向量。

或者,更好的是,因为你只需要9个元素并且永远不会改变,只需声明一个字符数组。