我有k(0 我的C ++代码从文件中读取并将每个文件的内容存储到 我希望合并(concat)然后将它们存储在一个 我希望将它们存储在 我试过 以上是否正确?Show
。vector<signed char>
中。vector<signed char>
File 1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Stored in vector1
File 2: 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 Stored in vector2
File 3: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Stored in vector3
File 4: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Stored in vector4
File 5: 1 1 0 1 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 Stored in vector5
:
vector<signed char> vectork
,其中每个元素的位模式为vectork[0]
- first col [0 0 0 0 1 0 1 1]
,其中每个元素的位模式为vectork[1]
- 第二列[0 0 0 0 1 1 0 1]
,其中每个元素的位模式为vectork[2]
- 第三列[0 0 0 0 1 0 0 0]
答案 0 :(得分:0)
使用bitset可以轻松完成,但是,如果你选择这样做,它看起来就像这样。
我仍然对你究竟想要做什么感到困惑,但似乎你正试图将所有这些向量都变成一个二维向量(你做了一组矢量,但我觉得你好像是这样想的。)
这将获得所有向量,并将它们附加到一个新的向量向量中。
// Example program
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<signed char> vector1 = {0,1,0,1,0,1,0,1};
vector<signed char> vector2= {0,0,0,1,0,1,0,1};
vector<signed char> vector3= {0,1,1,1,0,1,0,1};
vector<signed char> vector4= {1,1,0,1,0,1,0,1};
vector<signed char> vector5= {1,0,0,1,0,1,0,1};
vector<vector<signed char>> vectork(5, vector<signed char>(8));
vectork.clear();
vectork.push_back(vector1);
vectork.push_back(vector2);
vectork.push_back(vector3);
vectork.push_back(vector4);
vectork.push_back(vector5);
//to check if it correctly works (it does).
for(vector<signed char> v : vectork) {
for(signed char i : v) {
printf("%d ", i);
}
printf("\n");
}
}
输出如下:
0 1 0 1 0 1 0 1
0 0 0 1 0 1 0 1
0 1 1 1 0 1 0 1
1 1 0 1 0 1 0 1
1 0 0 1 0 1 0 1
如果您尝试做一些稍微不同的事情,请告诉我,我可以为您调整一下,或者如果您需要对我写的内容进行任何解释,或者一般有任何问题。
答案 1 :(得分:0)
首先,我建议您使用std::vector<bool>
而不是std::vector<signed char>
这是出于性能原因,因为您的编译器可能通过将1个字节中的8个布尔值存储为存储1布尔值来减少内存使用量在一个字节。其次,我认为你完全误解了位移的过程,据我所知,你发布的只是试图连接两个STL向量,这被问到here。作为参考,我已经包含了Robert Gamble的优秀答案中的代码片段。在你的
vector1.insert( vector1.end(), vector2.begin(), vector2.end() );
答案 2 :(得分:0)
#include <vector>
std::vector<signed char>
merge(const std::vector<signed char>& vector1,
const std::vector<signed char>& vector2,
const std::vector<signed char>& vector3,
const std::vector<signed char>& vector4,
const std::vector<signed char>& vector5)
{
std::vector<signed char> result;
result.reserve(vector1.size());
auto i1 = vector1.begin();
auto i2 = vector2.begin();
auto i3 = vector3.begin();
auto i4 = vector4.begin();
auto i5 = vector5.begin();
while (i1 != vector1.end()) {
int n = 0;
for (auto *v: { &i1, &i2, &i3, &i4, &i5 })
n = n*2 + *(*v)++;
result.push_back(n);
}
return result;
}
// test it:
#include <algorithm>
int main()
{
auto v = merge({ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 });
auto expected = { 0b1011, 0b1101, 0b1000, 0b0001, 0b0001, 0b0000, 0b0000, 0b0000,
0b0001, 0b1001, 0b1001, 0b0000, 0b0000, 0b0000, 0b1001, 0b0000,
0b0000, 0b0000, 0b1001, 0b0000 };
return !std::equal(expected.begin(), expected.end(), v.begin());
}