[英]How can I push_back/copy custom type ( array) object to vector?
這是我聲明 foo 的代碼片段:
typedef pair<a, b> foo[8][8];
我寫了一個 function 來復制這種類型的對象:
copy(foo1, foo2);
將 foo2 復制到 foo1。 foo1 和 foo2 是 foo 類型。 另外,我有這個向量:
vector<foo> lst;
我想方便地訪問它,即lst [0][0][0].first
.first 將是 a 類型的 object。 如何將 foo object 復制到此向量(lst)? 我試着這樣做:
lst.push_back( new foo );
copy(lst[lst.size() - 1], foo1);
我怎么能做這樣的事情?
std::vector<foo>
意思是“foo 值的向量”,你不能push_back(new foo)
因為new foo
是一個指針( foo*
)。 您需要push_back(foo{})
,它默認構造一個foo
實例(一個值)。 這不起作用,因為:
std::vector<T>::push_back
要求T
是MoveInsertable (在這種特殊情況下)foo
是一個 C 數組,而 C 數組不是MoveInsertable 通常,C 數組不適用於std::vector
。 您可以改用std::array
,因為它是MoveInsertable 。
#include <vector>
#include <array>
#include <iostream>
using foo = std::array<std::array<std::pair<float, float>, 8>, 8>;
std::vector<foo> v;
v.push_back(foo{});
std::cout << v[0][0][0].first << "\n";
在這種情況下,您不需要您的copy
function 因為std::array
會進行復制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.