我有2D矢量(vector<vector<string>>
)與很多列(m * n)(這裏我提到這個2D矢量作爲Maintable)。我想創建一個具有主表中幾個特定列的新向量。 例如,假設如果我有一個包含12列的主表,我想將主表中的任何3個非連續列轉換爲新的2D向量。怎麼做?如何創建一個新的矢量與特定的列從現有的2D矢量在C++
0
A
回答
0
您可以使用的東西,如下
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
//...
const size_t N = 10;
std::string a[] = { "A", "B", "C", "D", "E", "F" };
std::vector<std::vector<std::string>> v1(N, std::vector<std::string>(std::begin(a), std::end(a)));
std::vector<std::vector<std::string>> v2;
v2.reserve(v1.size());
for (const std::vector<std::string> &v : v1)
{
v2.push_back(std::vector<std::string>(std::next(v.begin(), 2), std::next(v.begin(), 5)));
}
for (const std::vector<std::string> &v : v2)
{
for (const std::string &s : v) std::cout << s << ' ';
std::cout << std::endl;
}
它是簡單重寫使用C++的語法2003的代碼。例如,你可以寫
std::vector<std::vector<std::string>> v1(N,
std::vector<std::string>(a, a + sizeof(a)/sizeof(*a)));
,而不是
std::vector<std::vector<std::string>> v1(N, std::vector<std::string>(std::begin(a), std::end(a)));
等。
編輯:如果列不相鄰,那麼你可以用下面的辦法
#include <iostream>
#include <vector>
#include <array>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
const size_t N = 10;
const size_t M = 3;
std::string a[N] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
std::vector<std::vector<std::string>> v1(N, std::vector<std::string>(std::begin(a), std::end(a)));
std::vector<std::vector<std::string>> v2;
v2.reserve(v1.size());
std::array<std::vector<std::string>::size_type, M> indices = { 2, 5, 6 };
for (const std::vector<std::string> &v : v1)
{
std::vector<std::string> tmp(M);
std::transform(indices.begin(), indices.end(), tmp.begin(),
[&](std::vector<std::string>::size_type i) { return (v[i]); });
v2.push_back(tmp);
}
for (const std::vector<std::string> &v : v2)
{
for (const std::string &s : v) std::cout << s << ' ';
std::cout << std::endl;
}
}
+0
只需添加,此語法是C++ 11 – Lefsler
+0
感謝您的回覆。這個程序即將獲得列的序列。我的任務是獲得非連續的列。從10列矢量表中,我想要第2,第5,第6列。 – user3475204
+0
@ user3475204查看我更新的帖子。 –
相關問題
- 1. 創建一個矢量的2D陣列
- 2. 從舊矢量創建新的矢量?
- 3. 從C++輸入創建2D矢量
- 4. 分段故障:從給定的2D矢量2D矢量
- 5. 如何在C++中查找2D矢量中的矢量?
- 6. C++矢量元素擦除與新矢量創建
- 7. 如何創建矢量矢量?
- 8. 從矢量創建EPS,C++
- 9. 2D矢量到3D矢量
- 10. 2D矢量vs 1D矢量
- 11. 如何在現有矢量的多個點處插入矢量?
- 12. 該代碼如何從兩個2D矢量的叉積中檢索2D矢量?
- 13. 從2D矢量中分解矢量
- 14. R如何基於值的計數創建新矢量現有矢量的值的第一個實例
- 15. 創建矢量C++
- 16. 從距離和矢量創建矢量
- 17. 將2D矢量2D QVector C++
- 18. 如何爲矢量矢量創建一個Maybe等價物?
- 19. 基於另一個2D矢量排序2D矢量
- 20. 將1D矢量插入2D矢量而不創建Temp 1D矢量
- 21. 矢量的矢量,C++
- 22. 從文件創建一個矢量[矢量[字符]]
- 23. R:從另一個矢量創建具有某些值的矢量
- 24. 在2D矢量內排序矢量
- 25. 從現有矢量
- 26. 如何排序獨特的特徵::矢量的特徵::矢量?
- 27. HT在數據框架中創建一個新的矢量,並採用現有矢量的相關性
- 28. 以特定的順序創建從矢量陣列
- 29. 如何在C#中創建矢量#
- 30. 從給定的矢量創建矩陣
請分享定義,我不知道你怎麼那些*列*在'STD得到表示: :vector'(因爲是'std :: vector',是嗎?) – jsantander
什麼是2D矢量? –
如果你有選擇,使用'std :: slice'和'std :: valarray'這樣的操作會容易得多。如果沒有,請考慮讓你的數據是一個單一的'std :: vector',然後你可以簡單地使用一些簡單的索引數學來表現它,就好像它是一個2D矩陣。 –
Edward