如何在C++中用一个字符填充数组

How to fill an array with one character in C++

本文关键字:一个 字符 数组 填充 C++      更新时间:2023-10-16

而不是设置一个循环来遍历这个数组的每个位置,并将其设置为等于这个点

int arraySize=50;
char board[arraySize];
     for(i=0; i<arraySize; i++)
          board[i]='.';

有什么方法可以声明一个数组用这些"填充吗马上

例如char-board[arraySize]={'.};

您可以用以下方式构造向量,而不是数组:

vector<char> board(arraySize, '.');

矢量可以像数组一样使用:

char c = board[1];

据我所知,实现这一目标的唯一方法是实际执行您发布的char-board[arraySize]={'.','.',''.'…(50次)},但实际复制并粘贴它50次,这很麻烦,也不明智。所以for循环有效,或者使用向量!

该声明的问题在于,您在编译时使用仅在运行时已知的大小来分配内存。arraySize可能随时更改。例如,如果你说:

#define ARRAY_SIZE 50
char board[ARRAY_SIZE];

这样,在编译时就知道要分配的大小,编译器不会抱怨。然后您可以使用:memset(array, '.', size_of_array); 进行初始化

您在运行时使用new分配的另一个选项,并像这样使用"值初始化":

char * board = new char[arraySize]();

这将在运行时为您分配和初始化数组。

请改用std::array,然后可以使用fill。

#include <array>
[..]
std::array<char, 50> board;
board.fill('.');

但请注意,这是C++11,在内部,数组上也有一个循环。你可以得到更少、更干净的代码,但速度并不快。

您可以选择使用std::vector,并在正确的构造函数重载中指定初始"填充"值:

#include <vector> // For std::vector
....
std::vector<char> board(arraySize, '.');

如果你真的需要一个原始的C数组,你总是可以使用std::fill()来简单地填充一些值:

#include <algorithm> // For std::fill
#include <iterator>  // For non-member std::begin and std::end 
....
static const int arraySize = 50;
char board[arraySize];
fill(begin(board), end(board), '.');

另一种选择是使用std::array(它像原始C数组一样重量轻,零开销,但也提供C++STL接口):

#include <algorithm> // For std::fill
#include <array>     // For std::array
....
static const int arraySize = 50;
std::array<char, arraySize> board;
std::fill(board.begin(), board.end(), '.');
// or just:
// board.fill('.');
// Since std::array has a fill() method.

(坦率地说,在C++中,我认为如果你真的需要使用静态大小的固定大小数组,std::array比原始C数组更好。)

std::vector是一种C++方法,用于处理运行时可以更改大小的数组:

std::vector<char> v( 50, '.'); // a vector with 50 dots

http://en.cppreference.com/w/cpp/container/vector

相关文章: