最近我正在尝试做一些性能基准测试,比较std::stack<int, std::vector<int>>和我自己的堆栈的简单实现(使用预先分配的内存)。现在我遇到了一些奇怪的行为。  
我想问的第一件事是堆栈基准代码中的这一行:
//  std::vector<int> magicVector(10);
当我取消注释这条线时,性能提高了大约 17%(基准时间从 6.5 秒下降到 5.4 秒)。但是该行应该对程序的其余部分没有影响,因为它不会修改任何其他成员。此外,它是int的向量还是double的向量都没有关系......
我想问的第二件事是我的堆栈实现和std::stack. 有人告诉我这std::stack应该和我的堆栈一样快,但结果显示我的“FastStack”是两倍快。  
结果(未注释的性能提升线):
stack 5.38979 
stack 5.34406 
stack 5.32404 
stack 5.30519 
FastStack 2.59635 
FastStack 2.59204 
FastStack 2.59713 
FastStack 2.64814  
这些结果来自 VS2010 的发布版本,带有 /O2、/Ot、/Ob2 和其他默认优化。我的 CPU 是 Intel i5 3570k,具有默认时钟(一个线程为 3.6 GHz)。
我将所有代码放在一个文件中,以便任何人都可以轻松测试它。
#define _SECURE_SCL 0
#include <iostream>
#include <vector>
#include <stack>
#include <Windows.h>
using namespace std;
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
//  Purpose:    High Resolution Timer
//---------------------------------------------------------------------------------
class HRTimer
{
public:
    HRTimer(); …为什么我的for循环增量不?整数“ i”不会以某种方式增加,这会导致要打印出数组的第一个位置。
我执行以下操作:
int* values = new int[10] {};
int& half(int* arr[]){
  //Here, the "i" doesn't increment  
  for(int i = 0; i < 10; i++){
      return *arr[i];
  }
}
int main(){
   int& a = half(&values);
   std::cout << a << std::endl;
   delete[] values;
   return 0;
}
我看到了关于在 O(1) 时间内使用 findmin 设计堆栈的问题的答案:
如果请求相同怎么办:
Devise a stack-like data structure that does push, pop and min (or max) operations 
in O(1) time. There are no space constraints.
但deletemin也应该是O(1)?是否可以?
说我有两个堆栈:
stack<int> s1, s2;
然后我在其中推送一些值:
s1.push(2);
s1.push(4);
s1.push(5);
s2.push(1);
s2.push(2);
s2.push(10);
当我像这样比较bool isEqual = (s1 > s2);它时,它会产生True.但为什么?并非所有s1的元素都大于相应的s2元素,并且所有元素的总和也不大于s2的元素.STL数据结构之间的确切比较方法是什么.
PS我想这也适用于队列,deques,列表.
这是本书的一个例子:
template <class T>
class stack
{
public:
stack();
stack(const stack&);
stack & operator=(const stack&);
~stack();
T& top();
void push(const T&);
void pop();
//few more functions 
}
我有以下问题:
为什么top的返回类型不是堆栈&为什么重载赋值的参数不是T&?
Rgds,Softy
我昨天进行了一些性能测试,看看堆栈和堆分配在实践中有多大差异.人们对这种测试的期望是堆分配略慢或与堆栈分配相同.然而,我惊讶地发现了相反的情况.我无法解释为什么,以及它在逻辑上是如何可能的,但堆分配总是稍微快一点(我正在编译优化OFF).
这是一个示例输出:
ticks (stack): 42698
ticks (stack): 43977
ticks (stack): 44024
ticks (stack): 44070
ticks (stack): 45038
ticks (heap): 42588
ticks (heap): 43525
ticks (heap): 43633
ticks (heap): 43681
ticks (heap): 43071
这是一个很小的差异但它非常一致,它在100%的时间内重现了堆分配.
谁能解释为什么我会得到这些奇怪的结果?
这是我运行的代码:
#include <vector>
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
struct JJ
{
    int c[50];
    JJ(int i) { c[5] = 3; c[29] = 4; c[30] = i; c[49] = c[5]; }
};
void fill_direct_stack()
{
    vector<JJ> vec;
    for (int i=0; i<1000; ++i)
        vec.push_back(i);
} …我正在研究Java中数据结构的这一部分,而我仍然对如何使用它们而不是数据结构以及为什么要使用它们感到困惑。
所以我很困惑,需要一个建议.在Java中,我可以实现自己的Stack,或者我可以使用java.util提供的Stack.
手册:
public class stack {
private int maxSize; //max size of stack
private char[] stackArray;
private int top; //index poistion of last element
public stack(int size){
    this.maxSize=size;
    this.stackArray=new char[maxSize];
    this.top=-1; //    
}
public void push(char j){
    if (isFull()) {
        System.out.println("SORRY I CANT PUSH MORE");
    }else{
    top++;
    stackArray[top]=j;
    }
}
public char pop(){
    if(isEmpty()){
        System.out.println("Sorry I cant pop more!");
        return '0';
    }else{
       int oldTop=top;
    top--;
    return stackArray[oldTop];
    }
}
public char peek(){
    if(!isEmpty()) {
        return stackArray[top];
    }
}
public boolean …我正在制作一个堆栈类,并试图使其成为对象并在另一个类中使用它。但是,它提到存在错误。这是我在类中初始化堆栈对象的代码:
class functions{
public:
int m[5];
int c=0;
stack_x mem(5);