有没有办法在c++; P> >好的,所以我有一个问题,我怀疑是一个实际的C++特性,但是它值得一试…我正在创建一个基于终端文本的mancala游戏,我正在使用一个数组来跟踪棋盘上每个纸杯中的点数,我想知道如果用户触发,比如说,“boardArray[13]”纸杯,并且数组的流动是按时间顺序进行的,我想知道 “boardArray[13]”循环回板的开头,并开始分发回“boardArray[1]”。我怀疑这是否有道理,如果你需要我澄清,请告诉我。我基本上想要一个 1,2,3,4,5,6,7,8,9,10,11,12,13,14, RESET 1,2,3,4,5,6,7,8,9,10,11,12,13,14, RESET 1,2,3... 你不需要一个“循环数组”,这样的东西在C++中不存在。
通过循环索引,可以很容易地达到相同的效果有没有办法在c++; P> >好的,所以我有一个问题,我怀疑是一个实际的C++特性,但是它值得一试…我正在创建一个基于终端文本的mancala游戏,我正在使用一个数组来跟踪棋盘上每个纸杯中的点数,我想知道如果用户触发,比如说,“boardArray[13]”纸杯,并且数组的流动是按时间顺序进行的,我想知道 “boardArray[13]”循环回板的开头,并开始分发回“boardArray[1]”。我怀疑这是否有道理,如果你需要我澄清,请告诉我。我基本上想要一个 1,2,3,4,5,6,7,8,9,10,11,12,13,14, RESET 1,2,3,4,5,6,7,8,9,10,11,12,13,14, RESET 1,2,3... 你不需要一个“循环数组”,这样的东西在C++中不存在。,c++,arrays,loops,C++,Arrays,Loops,通过循环索引,可以很容易地达到相同的效果 不要使用yourArray[i]只需使用yourArray[i%14]来访问它的前14个元素。内置数组类型不会这样做。如果您愿意,创建一个带有重载运算符的类型来完成这项工作是非常容易的 template <std::size_t N> class LoopedArray { int data[N]; public: int &operator[](size_t index) { return data
不要使用
yourArray[i]
只需使用yourArray[i%14]
来访问它的前14个元素。内置数组类型不会这样做。如果您愿意,创建一个带有重载运算符的类型来完成这项工作是非常容易的
template <std::size_t N>
class LoopedArray {
int data[N];
public:
int &operator[](size_t index) {
return data[index % N];
}
};
int main() {
LoopedArray<13> la;
// put known values into the array:
for (int i=0; i<13; i++)
la[i] = i;
// demonstrate reading the data with "looping" of the index:
for (int i=0; i<100; i++)
std::cout << la[i] << "\t";
}
模板
类循环数组{
int数据[N];
公众:
int&运算符[](大小索引){
返回数据[索引%N];
}
};
int main(){
洛佩达拉;
//将已知值放入数组:
对于(int i=0;i)这样的数组在C++中不存在,我知道(或者所有的编程都是这样的)。
您可以尝试使用链接列表:
class node {
public:
node* next;
int value;
}
然后,将几个链接在一起:
node root;
node* current=&root
for(i=0;i<14;i++) {
current->value=0; // for initialization
current->next = new node;
current = current->next;
}
current->next = root;
这只是一个例子,但很快就会有很多问题
我想我真的应该推荐与之类似的功能,但为您提供了一个很好的功能:
void addPoints(int arr[], int cup, int arrlen) {
int value = arr[cup]; // stored for later
arr[cup] = 0; // since we are emptying the cup
for(int i=0; i<value;i++) {
arr[(cup+i)%arrlen] += 1;
}
}
void addPoints(int-arr[],int-cup,int-arrlen){
int value=arr[cup];//存储以备以后使用
arr[cup]=0;//因为我们正在清空杯子
对于(int i=0;我不是100%确定你在问什么,但我想对用于索引数组的变量使用模运算符可能是你想要的。“如果需要我澄清,请告诉我”是的,澄清一下会有帮助。也许你可以用代码演示一下你需要什么?也许你只是想在第二个循环中加入一个基于范围的for循环。我假设在某个点/条件满足时,你会想要停止循环…你想要一个保持循环的数组?搜索词:“循环缓冲区”。根据它的运行时间、迭代速度以及索引变量的大小,如果(++i>=14,则有时最好使用i=0;
以防止索引溢出。非常感谢,这正是我想知道的!@user4581301我对mancala游戏不太熟悉,但据我所知,用户会从14个杯子中选择一个,然后你会循环重新分发这些杯子。因此,将达到的最高索引将是14个+numberOfPieces,对于所有popolar索引类型都足够小。
void DeleteList(node *n,node *root) {
if(n == root) {
return;
}
DeleteList(n->next,root);
delete n;
}
void addPoints(int arr[], int cup, int arrlen) {
int value = arr[cup]; // stored for later
arr[cup] = 0; // since we are emptying the cup
for(int i=0; i<value;i++) {
arr[(cup+i)%arrlen] += 1;
}
}