试图复制“向下”的2维向量似乎不起作用

时间:2017-12-14 13:58:54

标签: c++ vector copy

我正在生成hadamard矩阵,对于任何2d矩阵“M”,下一个矩阵是:

namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Klient
 *
 * @ORM\Table(name="klient")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\KlientRepository")
 */
class Klient
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nazwa", type="string", length=255, unique=true)
     */
    private $nazwa;


    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\User", mappedBy="klient")
     */
    private $users;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nazwa
     *
     * @param string $nazwa
     *
     * @return Klient
     */
    public function setNazwa($nazwa)
    {
        $this->nazwa = $nazwa;

        return $this;
    }

    /**
     * Get nazwa
     *
     * @return string
     */
    public function getNazwa()
    {
        return $this->nazwa;
    }

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }
}

e.g。

Matrix以1x1矩阵开头,值为“1”,这样:

M, M
M,-M

依旧...... see here

所以我有一个类型:

1 (x) 1, 1 = 1, 1
      1,-1   1,-1

1, 1 (x) 1, 1 = 1, 1, 1, 1
1,-1     1,-1   1,-1, 1,-1
                1, 1,-1,-1
                1,-1,-1, 1

在我的构造函数中,我将矩阵设置为起始值:

typedef std::vector<std::vector<char>> matrix_t;

因此,为了制作下一个矩阵,我决定复制行(重复复制),然后复制完整的矩阵(再次重复复制):

hadamard::hadamard() :
    m_matrixvoid hadamard::generate_next(matrix_t& matrix, size_t size)
{
    if (matrix.size() < size)
    {
        hadamard::print_matrix(matrix, "before");

        // Copy the matrix into 4: M1 | M2
        //                         ---+---
        //                         M3 | M4

        // For each inner vector - copy it (double up)
        for(auto& row : matrix)
        {
            // Double up the row
            row.insert(row.end(), row.begin(), row.end());
        }
        // For the outer vector - copy it (double up)
        matrix.insert(matrix.end(), matrix.begin(), matrix.end());

        // Invert chars in M4 (see diagram above)
        TODO

        hadamard::print_matrix(matrix, "after");        

        // Ok, feeling brave, now call recursively...
        generate_next(matrix, size);
    }
}

{
}

为了完整起见,这是我的打印功能:

static void print_matrix(matrix_t& matrix, const char * title)
{
    printf("%s\r\n", title);
    printf("Dimensions - rows: %d, cols: %d\r\n", matrix.size(), matrix[0].size());

    int row = 1;
    for(auto& line : matrix)
    {
        printf("NEW LINE\r\n");
        int col = 1;
        for (auto& item : line)
        {
            printf("item(%d, %d): %d\r\n", row, col, item);
            ++col;
        }
        ++row;
    }   
}

我得到的输出是这样的:

before
Dimensions - rows: 1, cols: 1
NEW LINE
item(1, 1): 1

after
Dimensions - rows: 2, cols: 2
NEW LINE
item(1, 1): 1
item(1, 2): 1
NEW LINE
<HERE SHOULD BE A COPY OF THE PREVIOUS "LINE">

你可以从输出中看到内部副本工作正常 - 我想这是因为我正在研究std :: vector所以内部数据是字符。

但是外部副本不起作用,我认为这个向量是“向量的向量”(完整类型是std::vector<std::vector<char>>)。

所以基本上就行:

        // For the outer vector - copy it (double up)
        matrix.insert(matrix.end(), matrix.begin(), matrix.end());

看起来似乎是matrix的两倍,但它不会复制数据。

为什么不复制数据? - 是因为需要深层复印吗? 另外,这是一种有效的方法吗?

与此同时,我将手动复制每行的数据......只是为了向自己证明我能做到!

更新

好吧,我“想”我有一个非常简单的修复......可能不是最好的方法吗?

for(auto& row : matrix)
{
    // Double up the row
    row.insert(row.end(), row.begin(), row.end());
    // Now copy the row down as well
    matrix.insert(matrix.end(), row);
}

但我以前的问题仍然存在!

更新2

不,最后的代码更改似乎“起作用”,至少在第一次迭代中......但是一旦我开始重新诅咒它就会崩溃...... 我已经更新了“递归”,所以它重新诅咒,我没有正确编写代码......现在我得到了输出:

HADAMARD MATRIX GENERATOR
Generating HM for index 2 - dimensions: 4x4, size: 16
before
Dimensions - rows: 1, cols: 1
1 
after
Dimensions - rows: 2, cols: 2
1 1 
1 1 
before
Dimensions - rows: 2, cols: 2
1 1 
1 1 
after
Dimensions - rows: 4, cols: 4
1 1 1 1 
1 1 
1 1 1 1 

before
Dimensions - rows: 4, cols: 4
1 1 1 1 
1 1 
1 1 1 1 

after
Dimensions - rows: 8, cols: 8
1 1 1 1 1 1 1 1 
1 1 
1 1 1 1 

1 1 1 1 1 1 1 1 

所以,它根本不顺利! - 我认为我的载体的连接都是错的?...

0 个答案:

没有答案