连接相同向量的2个元素并将其放入另一个向量中

时间:2016-03-11 11:24:31

标签: c++ c++11 vector

我有:

std::vector<unsigned int> data;

data[0] = 1;
data[1] = 1;
data[2] = 0;
data[3] = 1;
data[4] = 0;
data[5] = 2;
data[6] = 0;
data[7] = 2;
data[8] = 1;
data[9] = 2;
data[10] = 1;
data[11] = 2;

现在我想成对安排,如11 01 02 02 12 12。

paired_data[0] = data[0]data[1]
paired_data[1] = data[2]data[3] etc....

paired_data[0] = 11;
paired_data[1] = 01;
paired_data[2] = 02;
paired_data[3] = 02;
paired_data[4] = 12;
paired_data[5] = 12;

我认为连接向量将在这里工作,但我不知道如何。有人建议我用矢量连接(或任何其他逻辑)处理这个吗?

如果数据类型为bool,则左/右移位很容易处理。但是data包含三元数据(0,1,2),那么我该如何处理呢?

2 个答案:

答案 0 :(得分:1)

首先,您需要正确定义“连接”操作。你的意思是逐位串联还是复杂的东西?

一种方法是使用std::pair模板。这将为您提供任意类型的串联。 另一种方法是使用多维向量,即

std::vector<int> data;
std::vector<std::array<int,2>> paired_data;
for (size_t i = 0; i < data.size() - 1; i+=2)
{
  paired_data.push_back(std::array<int,2>{{data[i], data[i+1]}});
}

答案 1 :(得分:0)

你可以轻松转换它并以这种方式继承,但我不确定你想要什么

vector<unsigned int> data; // vector
unsigned int a = 4;
unsigned int b = 5;
data.push_back(a);      //push in vector
data.push_back(b);
int count=0;

    ostringstream oss; //convert
    oss << a << b;             //concatenate
    istringstream iss(oss.str());
    int c;
    iss >> c;  //  convert to int
    vector<unsigned int >paired_data;
    paired_data.push_back(c);


try to put this in a loop where u concatenate always two loop interations