簡體   English   中英

如何將自定義類型(數組)object 推回/復制到向量?

[英]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要求TMoveInsertable (在這種特殊情況下)
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM