标签: stack

如何在C#中使用while循环中的.pop()方法?

我可以用JS或PHP做到这一点:

while(var input = inputs.pop()) {
// do some bad things with input
}
Run Code Online (Sandbox Code Playgroud)

我在C#上尝试相同并且失败了:

Stack<double[]> localInputs = new Stack<double[]>();
for (int i = 0; i < inputs.Length; i++)
{
    localInputs.Push(inputs[i]);
}
while (input = localInputs.Pop()) // this cause error about converting double to bool
{
// do some bad things on c#
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?为什么我不能这样做?Assign应该返回boolean,nope?

c# stack

0
推荐指数
1
解决办法
6309
查看次数

当对象iniside对象不使用new关键字但父对象在堆中时,它是否存储在堆栈或堆中?

基本上,如果我有类A,A类持有类的实例B,而无需使用new,我创建一个类的实例A使用new.类中B的类实例是否A存储在堆栈或堆中?

c++ memory heap stack

0
推荐指数
1
解决办法
125
查看次数

为什么即使超出范围,存储在C++ STL向量中的堆栈分配元素仍然存活?

我有以下代码:

#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {

    vector<int > vi;

    for(int i=0; i<10; i++) {
        int j=i*i;
        vi.push_back(j);
    }

    for(int i=0; i<(int)vi.size(); i++)
        cout<<vi[i]<<" ";
    cout<<endl;

    return 1;
Run Code Online (Sandbox Code Playgroud)

}

执行此代码将返回"0 1 4 9 16 25 36 49 64 81",但这对我来说并不直观.

据我所知,当变量在堆栈上分配时,变量在超出范围时被解除分配.我也知道C++ STL向量存储指向变量的指针.为什么尽管整数在堆栈上被分配并超出范围,但向量仍保持有效整数?由于整数被解除分配,矢量保持的指针不应该被取消吗?

c++ stack vector

0
推荐指数
1
解决办法
199
查看次数

堆栈内容中保存的数据不断变化,无法增加

所以这是我的问题,我一直试图在过去的5个小时内解决这个问题,我有一个头文件,一个测试文件和一个交流源文件.我真的很想了解发生了什么,以及为什么我可以在将来避免这个问题.头文件声明了struct但没有定义它:

typedef struct Stack *StackP;

在我的源文件Stack.c中我定义了堆栈:

struct Stack
{
  int top;
  int capacity;
  int count;
  ItemT items;
};
Run Code Online (Sandbox Code Playgroud)

在哪里ItemT定义为char *

在测试文件中,调用是:

StackP stackPtr = newStack();

以及我对c源文件中的newStack函数所拥有的是:

StackP newStack(void) {
  struct Stack stack1;
  StackP stackPtr = &stack1;
  (stackPtr->items) = (ItemT)malloc(DEFAULT_CAPACITY*sizeof(ItemT));        

  (stackPtr->top) = -1;
  (stackPtr->capacity) = DEFAULT_CAPACITY;
  (stackPtr->count) = 0;    
  fprintf(stderr, "\nSuccesfully allocated memory to items...\n");

  return stackPtr;
}
Run Code Online (Sandbox Code Playgroud)

现在,我的推送功能是:

void pushStack(StackP stackPtr, ItemT item) {           
  if ((stackPtr->count) == (stackPtr->capacity)) {
    fprintf(stderr, "\nERROR: Full stack.\n");
  }
  else {
    stackPtr->items …
Run Code Online (Sandbox Code Playgroud)

c stack push peek

0
推荐指数
1
解决办法
45
查看次数

异常说堆栈是空的,当它不是?

advanced collections在书中学到了一些等等,并且遇到了stacks.我得到了概念,但想制作一个快速程序,从defined point in the stack当时删除一个项目places all the values back onto the stack.我在这里有我的代码,但我得到System.InvalidOperationException类型的异常,其中堆栈的其他信息为空.我似乎无法理解; 有人可以帮忙吗?

这是我的代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StackRemover
{
    class Program
    {
        static void Main(string[] args)
        {
            int index = 0; //the index they want to remove
            Stack[] array = new Stack[1]; // will hold the array returned by remove()
            Stack stack = new Stack();

            //fill the stack with values from …
Run Code Online (Sandbox Code Playgroud)

.net c# stack

0
推荐指数
1
解决办法
800
查看次数

std :: cout语句评估顺序

pop()函数有什么问题,为什么它不能正常工作?

class stack{
    int *p, *Cursor;
    int size ;
public:
    stack(int sz) {Cursor = p = new int[size=sz+1];} //consider the stack empty when its size is 1
    ~stack() {delete[] p;} //Cursor and P will be destroyed when the program finishes
    void push(int x) {Cursor+=1; *Cursor=x; size++;}
    int pop() {if(Cursor == p) return -1; int temp = *Cursor; Cursor--; size--; return (temp);}
    bool isEmpty(){return(Cursor == p);}
    bool isFull(){return(Cursor == p+size);}
};
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

stack A(3);
    std::cout<<"Empty: "<<A.isEmpty()<<std::endl;
    std::cout<<"Full: "<<A.isFull()<<std::endl;
    A.push(10);
    A.push(20);
    A.push(30); …
Run Code Online (Sandbox Code Playgroud)

c++ stack

0
推荐指数
1
解决办法
409
查看次数

删除一个列表中的所有元素并添加到另一个列表 - Java

所以我试图从玩家的'Rack'(一个ArrayList)中删除所有牌,并将其逐个放入丢弃堆(Stack)中.到目前为止,我有以下代码,我已经意识到一旦它达到5就会停止.(注意:每个玩家机架有10张卡).

        int rackSize = player.getPlayerRack().getRack().size(); // rackSize = 10
        for (int i = 0; i < rackSize; i++) {
            getDeck().getDiscardPile().add(player.getPlayerRack().getRack().remove(i));
        }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何删除玩家'Rack'中的所有项目,使rackSize = 0,并将所有项目添加到弃牌堆中?

如果这令人困惑,非常抱歉.你可以通过说a中有10个整数来概括它ArrayList<Integer> hand,所以:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].如何从此列表中删除所有项目并将其添加到Stack<Integer> discardPile

java stack arraylist

0
推荐指数
1
解决办法
989
查看次数

Stack的当前大小是多少?

假设最初为空的堆栈S已执行总共25个推送操作,12个顶部操作和10个弹出操作,其中3个返回null以指示 空堆栈.S的当前大小是多少?

我认为S.size = 7因为10个弹出操作有10个中的3个返回null表示空堆栈但不确定它是否正确

任何人都可以给出正确的答案和解释吗?

algorithm stack data-structures

0
推荐指数
1
解决办法
1330
查看次数

访问违规写入位置0xCDCDCDCD

我正在尝试使用一个结构"学生"和另一个结构"堆栈"创建一个小的链表,其中包含学生结构和指向下一个元素的指针.

但是我经常不断收到内存访问错误.我仔细检查以确保所有指针都已初始化(只有一个指针,Stacktop,初始化为NULL)

以下是结构定义:

#include <stdio.h>
#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;

struct students
{
   int matnr;
   string name;
};

struct stack
{
   students stud;
   stack *next;
};

typedef struct stack Stack;
typedef Stack *ptrStack;

void push(students s);
students pop();
int isEmpty();
void printStack(students stud);
Run Code Online (Sandbox Code Playgroud)

这是推送功能(不断崩溃程序)

#include "stack.h"

ptrStack Stacktop = NULL;

void push(students s)
{
    ptrStack stack = (ptrStack)malloc(sizeof(Stack));

    if (stack == NULL)
    {
        cout << "!!FIN!!" << endl;
        return;
    }

    stack->stud = s;
    stack->next = Stacktop; …
Run Code Online (Sandbox Code Playgroud)

c++ stack

0
推荐指数
1
解决办法
4021
查看次数

为什么整数类型需要是little-endian?

我很好奇小端,我知道计算机几乎都有小端方法.

所以,我通过一个程序进行了调查,来源如下.

int main(){

int flag = 31337;
char c[10] = "abcde";
int flag2 = 31337;

return 0;

}
Run Code Online (Sandbox Code Playgroud)

当我通过gdb看到堆栈时,

我注意到有0x00007a69 0x00007a69 ...... ...... ...... .... ... 0x62610000 0x00656463 ......

所以,我有两个问题.

一方面,

如何能够char c[10]在旗帜下的价值?

我预计在堆栈顶部有flag2的值,在flag2下有char c [10]的值,在char c [10]下有flag的值.

像这样

7a69
"abcde"
7a69
Run Code Online (Sandbox Code Playgroud)

第二,

我预计价值会以小端的方式存储.

结果,"abcde"的值存储为"6564636261"

但是,31337的值不是通过little-endian存储的.

那只是'7a69'.我以为它应该是'697a'

为什么整数类型不符合little-endian?

c stack endianness

0
推荐指数
1
解决办法
388
查看次数

标签 统计

stack ×10

c++ ×4

c ×2

c# ×2

.net ×1

algorithm ×1

arraylist ×1

data-structures ×1

endianness ×1

heap ×1

java ×1

memory ×1

peek ×1

push ×1

vector ×1