调整矢量大小并在最后添加数据

时间:2016-05-10 07:41:48

标签: c++ vector resize

我在对矢量进行排序后,通过重新定义双向量来解决问题。在程序中,我得到一些给定.stl文件的坐标(xyz)。为了重建这个模型,我将这个坐标存储在一个向量中。所以首先我创建矢量矩阵:

public function get_image()
{
    $reg = $this->session->userdata['user'][0]['REG#'];
    /*$this->db->select("PIC");
    $query = $this->db->get_where("ADM_STUDENT",array("REG#" => "BET-FA07-012"));*/

    $query = $this->db->query("select * from ADM_STUDENT WHERE REG# = 'BEE-FA15-066'");
    $row = $query->row_array();
    echo "<pre>";
    print_r($row);
    //$this->output->set_header('content-type: image/jpeg');
    //print $row['PIC'];
    //echo '<img src="data:image/jpeg;base64,'.base64_encode( $row['PIC'] ).'"/>';
}

然后我用数据填充它并对数据进行排序:

vector<vector<double> > matrix;
int rows = ((2*lss.size()));//numbers of rows the vector need; lss is a vecotr and stores the coordinates; lss can not be used
int column = 3 //x-,y-,z-coordinates

matrix.resize(rows);

for(size_t i=0; i<rows; i++) {
        matrix[i].resize(column);
}

要关闭模型的轮廓,下一步将增加向量,以便可以保存一个点并将第一个点复制到向量的末尾。 所以我尝试了这段代码:

int j=0;
for(size_t i = 0;i<lss.size();i++) {
    int k = j+1;

    matrix[j][0]=lss[i].v[0].x;
    matrix[j][1]=lss[i].v[0].y;
    matrix[j][2]=lss[i].v[0].z;
    matrix[k][0]=lss[i].v[1].x;
    matrix[k][1]=lss[i].v[1].y;
    matrix[k][2]=lss[i].v[1].z;

    j=j+2;
}
std::sort(matrix_zeile.begin(), matrix_zeile.end(), compare2);

要将数据打印到文件,我使用此代码

int rows_new = ((2*lss.size())+2);
matrix.resize(rows_new);

for(size_t i=0; i<rows_new; i++) {
    matrix[i].resize(columns);
}

int p = 2*lss.size();
int q = (2*lss.size())+1;

matrix[p][0]=matrix[0][0];
matrix[p][1]=matrix[0][1];
matrix[p][2]=matrix[0][2];
matrix[q][0]=matrix[0][0];
matrix[q][1]=matrix[0][1];
matrix[q][2]=matrix[0][2];

我的问题似乎是,resize函数在向量的beginnign处添加新的存储空间而不是在最后,因为我需要它。因此,当我打印坐标时,第一个指向的点始终为零。

我现在的问题是:是否有可能调整向量的大小并在向量矩阵的末尾添加新的storeg空间?

0 个答案:

没有答案