【问题标题】:Point position in a vector/array向量/数组中的点位置
【发布时间】:2016-06-26 11:33:09
【问题描述】:

我正在编写一个使用向量/数组中的元素的 C++ 代码。我所做的基本上是在我的主要代码之外我创建了一个向量:

     const int Lx = 4, Ly = 4;
     const int L = Lx*Ly;

     inline void vector_lattice(){

         for (int i = 0; i < L+1; i++){
             s[i]=0.0;
         }

         for (int i = 0; i < L; i++){
             s[i] =1;
         }

    }

Lx 和 Ly 会给我尺寸,因为最终我会把它变成一个 5x5 的数组。

在我的问题中,这将为我提供“空间”中的一组位置,其输出应该类似于

     .   .   .   .   .
     .   .   .   .   .
     .   .   .   .   .
     .   .   .   .   .
     .   .   .   .   .

但是我现在需要类似的东西

     .   .   .   .   .
       .   .   .   .   .
     .   .   .   .   .
       .   .   .   .   .
     .   .   .   .   .

或者灵活地改变这些位置,但我真的不知道该怎么做,因为我只能是一个整数,因此我的位置和太空人的位置总是一样的。有人对如何做到这一点有任何想法吗?

【问题讨论】:

  • 第一个循环将 L+1 个元素归零,这是有意的吗?
  • 只需将“标本”放在偶数行中的偶数列中,奇数行中的奇数列中。拥有一个“空样本”的“样本”以具有空白值。
  • 没有进一步的限制,是什么阻碍了您将数组解释为像第二张图片一样排列?

标签: c++ arrays vector


【解决方案1】:

给它一些抽象。定义 Specimen 类并存储这些对象,而不是 ints 或任何您使用的对象:

class Specimen {
    // Your Specimen class definition here, all specimens should inherit from it.
}

class EmptySpecimen : public Specimen {
    // Nothing here other than overriden virtual methods.
}

class SomeSpecimen : public Specimen {
    // Actual specimen implementation.
}

然后在代码中你可以使用以下方法初始化你的向量:

size_t width, height; // assign some values to these
vector< vector <Specimen*> > specimensMatrix;
specimensMatrix.resize(width);
for (size_t x = 0; x < width; ++x) {
    specimensMatrix.resize(height);
}

按照您期望的方式填充它:

for (size_t x = 0; x < width; ++x) {
    for (size_t y = 0; y < height; ++y) {
        if (x % 2 == 0) {
            if (y % 2 == 0) {
                specimensMatrix[x][y] = new SomeSpecimen(/* ... */);
            else
                specimensMatrix[x][y] = new EmptySpecimen();
        }
        else {
            if (y % 2 == 0) {
                specimensMatrix[x][y] = new EmptySpecimen();
            else
                specimensMatrix[x][y] = new SomeSpecimen(/* ... */);
        }
    }
}

所以你在矩阵中大小为 8x6 的对象看起来像这样(E 代表 EmptySpecimenS 代表 SomeSpecimen):

SESESESE
ESESESES
SESESESE
ESESESES
SESESESE
ESESESES

或者,如果您将E 替换为空格,将S 替换为点:

. . . . 
 . . . .
. . . . 
 . . . .
. . . . 
 . . . .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2021-01-13
    • 2020-10-26
    • 2017-12-05
    • 2013-04-09
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多