小编AnT*_*AnT的帖子

在数组C++中移位元素

我已经为我的堆栈对象类开发了一个名为"rotate"的方法.我所做的是,如果堆栈包含元素:{0,2,3,4,5,6,7}我需要向前和向后旋转元素.

如果我需要向前旋转2个元素,那么我们将在数组中有{3,4,5,6,7,0,2}.如果我需要向后旋转,或者-3个元素,那么,查看原始数组,{5,6,7,0,2,3,4}

所以我开发的方法运行正常.它只是非常无效的IMO.我想知道我是否可以使用mod运算符包围数组?或者,如果它们是无用的代码,我还没有意识到,等等.

我想我的问题是,我该如何简化这种方法?例如使用较少的代码.:-)

void stack::rotate(int r)
{
    int i = 0;
    while ( r > 0 ) // rotate postively.
    {
        front.n = items[top+1].n;
        for ( int j = 0; j < bottom; j++ )
        {
            items[j] = items[j+1];                                  
        }
        items[count-1].n = front.n;
        r--;
    }

    while ( r < 0 )  // rotate negatively.
    {
        if ( i == top+1 )
        {
            front.n = items[top+1].n;  
            items[top+1].n = items[count-1].n; // switch last with first
        }

        back.n = items[++i].n; // second …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

3
推荐指数
3
解决办法
3361
查看次数

map.find和指向向量的指针的奇怪行为

我有一个矢量映射对的映射,如下所示:

std::map<std::pair<uint16, uint16>, std::vector<std::vector<uint32> > >
Run Code Online (Sandbox Code Playgroud)

地图填充在类的构造函数中.这个类提供了一个返回指向std::vector<std::vector<uint32> >(映射值部分)的指针的公共方法,如下所示:

typedef std::pair<uint16, uint16> key;
typedef std::vector<std::vector<uint32> > value;

value* FindValues(key someKey) {
    std::map<key, value>::const_iterator it;
    it = someStore.find(someKey);
    if (it != someStore.end()) 
        return &(value)it->second;
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

这是奇怪的时候.迭代FindValues返回的向量时,所有子向量都有一个大的负数(例如-1818161232)作为它们的第一个值.但是,如果我使用如下函数:

value FindValues(key someKey) {
    std::map<key, value>::const_iterator it;
    return someStore.find(someKey)->second;
}
Run Code Online (Sandbox Code Playgroud)

......那么价值是正常的.这仅发生在所有子向量的索引0处的值.但是,使用第二种方法,如果找不到密钥,我的应用程序会出现段错误(原因很明显).我究竟做错了什么?

c++ pointers vector map

3
推荐指数
1
解决办法
988
查看次数

使用 C 中的值初始化整个数组

我试图初始化整个int数组,在搜索 Stackoverflow 后,我发现最好的方法是使用std::fill_nfrom<algorithm><vector>header,但包含两者会给出错误。我认为这些方法只能在 C++ 中使用,还是我做错了什么?

如何使用 C 中的值初始化整个数组而不使用任何循环,即在单个语句中?

我正在 Fedora 14 终端上工作并使用 gcc 编译它。

c arrays algorithm gcc header

3
推荐指数
1
解决办法
3937
查看次数

GCC 中的 `movaps` 与 `movups`:它是如何决定的?

我最近研究了一个用GCC 8编译的软件中的segfault。代码如下(这只是一个草图)

struct Point
{
  int64_t x, y;
};

struct Edge
{
  // some other fields
  // ...
  Point p; // <- at offset `0xC0`

  Edge(const Point &p) p(p) {}
};

Edge *create_edge(const Point &p)
{
  void *raw_memory = my_custom_allocator(sizeof(Edge));
  return new (raw_memory) Edge(p);
}
Run Code Online (Sandbox Code Playgroud)

这里的关键点是my_custom_allocator()返回指向未对齐内存的指针。代码崩溃是因为为了将原始点复制pEdge::p新对象的字段中,编译器在 [内联] 构造函数代码中使用了movdqu/movaps

movdqu 0x0(%rbp), %xmm1  ; read the original object at `rbp`
...
movaps %xmm1, 0xc0(%rbx) ; store it into the new `Edge` object …
Run Code Online (Sandbox Code Playgroud)

c++ optimization x86 gcc memory-alignment

3
推荐指数
1
解决办法
1802
查看次数

简单操作员问题.+ =

所以我的朋友给了我一些源代码,所以我可以回顾和理解它,我有一个问题,但由于他不在线,我想我会在这里尝试,主要是我不太明白这一行.

num += i;
Run Code Online (Sandbox Code Playgroud)

基本上,这是相同的

num = num + i 
Run Code Online (Sandbox Code Playgroud)

对?

如果您需要更多细节请告诉我!我期待很快听到您的回复.

c++ variables operators

2
推荐指数
1
解决办法
165
查看次数

计算的控件不会自动重新计算

首先,关于我的设置.

我有一个包含三个表的原始数据库:

A.列出各种位置的表:[location_code],[location_name]

B.描述项目的表:[item_code],[item_name],[item_price]

最后是一个将roo ^ H ^ H ^ H整个数据库连接在一起的表

C.表说明每个位置存储的项目和数量:[location_code],[item_code],[item_quantity].该表可以具有多个具有相同[location_code]的条目,因为不同的项可以存储在同一位置.基本上,这是一个从位置到项目的一对多关系的教科书实现,每个位置 - 项目链接附加一个额外的属性(数量).

现在,我需要做的就是创建一个表单,列出存储在特定位置的所有项目.这是Access中"子窗体"功能的基本用例.主窗体只是导航到不同的位置,而子窗体列出项目.

我用

SELECT C.location_code, B.item_name, B.item_code, B.item_price, C.item_quantity 
FROM B INNER JOIN C ON B.item_code=C.item_code
Run Code Online (Sandbox Code Playgroud)

作为子表单的记录源.主窗体通过[location_code]链接到子窗体.子表单设置有列表布局(不是表格布局),即每个数据库字段都有自己的控制元素.

到目前为止一切都很完美.我在主窗体中选择了位置,子窗体为我提供了当前位置的可编辑[item_name] - [item_price] - [item_quantity]三元组列表.

下一步,我想为每个上述三元组添加一个计算控件.我想知道每种商品的总价格(即[item_price] * [item_quantity]每行的价格).很简单,我将计算的控件添加到子窗体的"可重复"区域并指定

= [item_price] * [item_quantity]
Run Code Online (Sandbox Code Playgroud)

作为价值的公式.再一次,一切都很完美.现在我的列表不是上面的三元组,而是每行有四个条目:[item_name] - [item_price] - [item_quantity] - [total_item_price].而且,重要的是,当我编辑[item_price]或[item_quantity]时,[total_item_price]会在我完成编辑后自动重新评估.

而作为最后一步,我想补充另一个计算控制,将显示存储在当前位置的所有项目的总价格(姑且称之为"总计").A也控制子表单(这次进入"脚注"区域)并指定以下公式作为其值

= SUM([item_price] * [item_quantity])
Run Code Online (Sandbox Code Playgroud)

现在,这有效.每次更改主窗体中的位置时,都会正确计算总值.此外,当我更改当前位置的任何项目的[item_price]时,总计也会自动更新.但是,当我更改[item_quantity]时,总计不会更新(???).点击F9将使其更新.来回更改当前位置将更新它.但是,不幸的是,仅仅更改[item_quantity]不会触发自动更新.

有谁知道,这里可能有什么问题?为什么[item_price]中的更改会触发总计的自动更新,而[item_quantity]中的更改则不会?直觉上,这些字段似乎具有相同的状态(除了前者来自表B,而后者来自表C).为什么行为不同?如何让它自动更新?

ms-access ms-access-2007

2
推荐指数
1
解决办法
4197
查看次数

我误解了指针ref/deref,指针算术还是领先0确实对C检测相等的能力产生了影响?

我一直试图理解我用以下代码得到的错误

bytes2bits(p,q,pixels)
u_char *p, *q;
register u_int pixels;
{
  register u_char *r, a;
  register u_long *l;

   ...

switch (*l++) {
    case 0x00000000:    a = 0x00; break;
    case 0x00000001:    a = 0x10; break;
    case 0x00000100:    a = 0x20; break;
    case 0x00000101:    a = 0x30; break;

    case 0x00010000:    a = 0x40; break;
    case 0x00010001:    a = 0x50; break;
    case 0x00010100:    a = 0x60; break;
    case 0x00010101:    a = 0x70; break;

    case 0x01000000:    a = 0x80; break;
    case 0x01000001:    a = 0x90; break; …
Run Code Online (Sandbox Code Playgroud)

c hex pointers

2
推荐指数
1
解决办法
273
查看次数

用C++归零2d数组.我需要2个循环吗?

如何在C++中将2D数组归零?我需要两个for循环吗?

来自其他更高级的语言,我想知道为什么C++不会将数组初始化为有意义/合理的默认值?我是否总是需要声明一个数组然后将其"归零"?

c++ arrays

2
推荐指数
1
解决办法
2590
查看次数

是否可以在C/C++中声明全局2D数组?

当我尝试像这样声明一个global二维数组C++:

int maxX = 10;
int maxZ = 10;
SDL_Rect mapX[maxX][maxZ];
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说
error: variable-size type declared outside of any function

c c++ arrays multidimensional-array variable-length-array

2
推荐指数
1
解决办法
9432
查看次数

++((unsigned)x)的意外结果,x是uint8_t?

为什么这段代码不会导致y == 0x100

uint8_t x = 0xff;
unsigned y = ++((unsigned)x);
Run Code Online (Sandbox Code Playgroud)

请在此处查看:http://codepad.org/dmsmrtsg

c gcc

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

外部与内部联系和绩效

假设我在一个类中有3个函数:

class Foo {
    inline void FooInline() { /* bla bla */ }
    static void fooStatic();
    void foo();
};
Run Code Online (Sandbox Code Playgroud)

据我所知,最后两个有外部联系,而第一个有内部.

我想知道哪个函数最快可以调用,以及什么是权衡.

谢谢

c++

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

继承抄袭C++中的多态?

也许我对遗传和多态性的了解并不是我想象的那样.任何人都能解释一下吗?

设置(问题的平凡化):

class X {
};

class Y {
};

class Base {
  public:
    void f( X* ) {}
};

class Child: public Base {
  public:
    void f( Y* ) {}
};
Run Code Online (Sandbox Code Playgroud)

问题:这应该有效,对吧?

int main( void ) {
  X* x = new X();
  Y* y = new Y();
  Child* c = new Child();
  c->f( x );
  c->f( y );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到错误(GCC 4.4):

`no matching function for call to 'Child::f(X*&)'`
`note: candidates are: void Child::f(Y*)`
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance

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