401 votes

Meilleure façon d’extraire un subvector d’un vecteur ?

Supposons que j’ai un (appelons-le ) de taille . Quel est le moyen plus simple de construire un nouveau vecteur composé d’une copie des éléments de X par Y, où 0 par dans un vecteur de taille `` .

Si cela ne peut se faire efficacement avec un vecteur, existe-t-il un autre type de données STL que je devrais utiliser à la place ?

481voto

Greg Rogers Points 18119
<pre><code></code><p>C’est une opération o (n) pour construire le nouveau vecteur, mais il n’est pas vraiment une meilleure façon.</p></pre>

110voto

Loki Astari Points 116129

Il suffit d’utiliser le constructeur de vecteur.

32voto

Anteru Points 8581

, dans votre cas , voir par exemple ici

12voto

Eclipse Points 27662

Si les deux ne vont pas être modifié (pas d'ajout/suppression d'éléments - la modification est très bien aussi longtemps que vous payez attention aux problèmes de threading), vous pouvez tout simplement passer autour de data.begin() + 100000 et data.begin() + 101000, et de prétendre qu'ils sont l' begin() et end() d'un plus petit vecteur.

Ou, depuis le vecteur de stockage est assuré d'être contiguë, vous pouvez tout simplement passer un 1000 élément de tableau:

T *arrayOfT = &data[0] + 100000;
size_t arrayOfTLength = 1000;

Ces deux techniques constamment prendre le temps, mais exigent que la longueur des données n'augmente pas, le déclenchement d'une réaffectation.

1voto

Daniel Spiewak Points 30706

La seule façon de projet une collection qui n’est pas un temps linéaire est à faire ainsi paresseusement, où le « vecteur » qui en résulte est en réalité un sous-type qui délègue à la collection d’origine. Par exemple, Scala `` méthode créer une sous-séquence en temps constant. Toutefois, cela ne fonctionne que si la collection est immuable et si le langage sous-jacent de sport opération garbage collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X