Verwendung von Resize() in Vektorgruben

Verwendung von Resize() in Vektorgruben

先赞后看,养成好习惯。有帮助的话,点波关注!我会坚持更新,感谢谢您的支持!

Referenz :
std::vector::resize

Anforderungen : Es liegt ein Problem vor, den Vektor im Debugging-Programm auf 0 zu setzen, und schließlich wurde festgestellt, dass die Größenänderung nicht ordnungsgemäß verwendet wurde. Notieren Sie dies daher.


Vereinfachte Beschreibung der Situation

1. Initialisieren Sie den Vektor und weisen Sie dann mit resize () allen Elementen Werte zu

vector<int> test = {0,1,2,3,4};
test.resize(10,0);
// 打印结果
for(const auto &value: test) std::cout << value << ","; 
std::cout << std::endl;

Normalerweise geht man davon aus, dass das gedruckte Ergebnis 10 0 beträgt, aber das ist tatsächlich so0,1,2,3,4,0,0,0,0,0,

2. Beschreibung der Resize()-Funktion

2.1 Funktionsprototyp (C++11)

void resize (size_type n);
void resize (size_type n, const value_type& val);

2.2 Offizielle Erklärung

Resizes the container so that it contains n elements.

If n is smaller than the current container size, the content is reduced to its first n elements, removing those beyond (and destroying them).

If n is greater than the current container size, the content is expanded by inserting at the end as many elements as needed to reach a size of n. If val is specified, the new elements are initialized as copies of val, otherwise, they are value-initialized.

If n is also greater than the current container capacity, an automatic reallocation of the allocated storage space takes place.

Notice that this function changes the actual content of the container by inserting or erasing elements from it.

2.3 Gebrauchsanweisung

  • Ändert die Größe des Containers so, dass er n Elemente enthält
  • Wenn n kleiner als die aktuelle Containergröße ist, wird der Inhalt auf die ersten n Elemente und 删除die darüber hinausgehenden Elemente reduziert (und diese freigegeben).
  • Wenn n größer als die aktuelle Containergröße ist, wird der Inhalt am Ende um die erforderliche Anzahl an Elementen erweitert, 插入um die Größe von n zu erreichen. Wenn val angegeben ist, werden die neuen Elemente als Kopien von val initialisiert, andernfalls werden sie auf 0 initialisiert.
  • Ist n zudem größer als die aktuelle Containerkapazität, wird der zugewiesene Speicher automatisch neu zugewiesen.

Beachten Sie , dass diese Funktion 插入或删除den tatsächlichen Inhalt des Containers elementweise ändert.

2.4 Praxisbeispiele

Leihen Sie sich das offizielle Beispiel aus.

// resizing vector
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;

  // set some initial content:
  for (int i=1;i<10;i++) myvector.push_back(i);

  myvector.resize(5);
  myvector.resize(8,100);
  myvector.resize(12);

  std::cout << "myvector contains:";
  for (int i=0;i<myvector.size();i++)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}

Ergebnis :
myvector enthält: 1 2 3 4 5 100 100 100 0 0 0 0

Erklärung :

  • Initialisieren Sie 9 Elemente von 1 bis 9.
  • Die erste Operation resize(5) löscht die letzten 4 Elemente, so dass zu diesem Zeitpunkt 1 2 3 4 5 übrig bleibt.
  • Die zweite Operation, resize(8,100), fügt am Ende drei Elemente ein, und der Wert der drei Elemente beträgt 100.
  • Die dritte Operation, resize(12), fügt am Ende wieder 12-8=4 Elemente ein. Da das Element keinen Anfangswert liefert, ist der Standardwert 0.

2.5 Erweiterung

Die eigentliche Anforderung im Projekt besteht darin, zu Beginn des Programms alle Elemente im Mitgliedsvariablenvektor auf 0 zu setzen und schließlich die std::fill() Füllfunktion zu verwenden, die clear()den Wert löscht, aber den Speicher nicht freigibt.

std::fill(input_data_.begin(), input_data_.end(), 0);  // 填充
input_data_.clear(); // 清空后,遍历打印则看不到结果

Supongo que te gusta

Origin blog.csdn.net/weixin_36354875/article/details/126274661
Recomendado
Clasificación