O que são vetores e como eles são usados na programação?

eu estou familiarizado com a matemática/física o conceito de um vetor como uma magnitude e uma direção, mas eu também manter vir através de referências a vetores no contexto de programação (por exemplo, C++, parece ter um stl::vector biblioteca que surge com bastante frequência sobre ISSO).

A minha intuição do contexto tem sido que eles são uma construção bastante primitiva, mais frequentemente usada para representar algo ao longo das linhas de uma matriz de comprimento variável (armazenando o seu tamanho como a magnitude, eu presumível), mas seria realmente útil se alguém pudesse me fornecer uma explicação mais completa, de preferência incluindo como e por que eles são usados na prática.

Author: Lawrence Johnston, 2009-02-03

11 answers

De http://www.cplusplus.com/reference/stl/vector/

Os contentores vectoriais são implementados como arrays dinâmicos; tão regulares matrizes, recipientes vetoriais, têm os seus elementos armazenados em armazenagem contígua locais, o que significa que elementos podem ser acessados não só utilização de iteradores, mas também utilização de compensações on regular pointers to elements.

Mas ao contrário das matrizes regulares, o armazenamento em os vectores são tratados automaticamente, permitindo-lhe ser expandido e contratado quando necessário.

Além disso, os vectores podem tipicamente conter qualquer objecto - para que possa fazer uma classe para guardar informações sobre veículos, e depois armazenar a frota num vector.

Coisas boas sobre vetores, além de redimensionar, é que eles ainda permitem o acesso em tempo constante a elementos individuais através do Índice, assim como um array.

A troca para redimensionar, é que quando você atinge a capacidade atual, ele tem que realocar, e às vezes copiar para, mais memória. No entanto, a maioria dos algoritmos de aumento de capacidade duplica a capacidade cada vez que você atinge a barreira, então você nunca atingiu mais do que log2(heap disponível), que acaba por ser talvez uma dúzia de vezes no pior caso durante a operação do programa.

-Adam

 36
Author: Adam Davis, 2009-02-03 18:47:26

Em matemática, um vetor pode ser considerado como uma combinação de direção e magnitude. No entanto, também pode ser pensado como uma coordenada. Por exemplo, um vetor com magnitude 5 e um ângulo de cerca de 37 graus da horizontal representa um ponto em um plano 2D. Este ponto também pode ser representado com o par de coordenadas cartesianas (3, 4). Este par (3, 4) é também um vetor matemático.

Na programação, este nome "vector" foi originalmente usado para descrever qualquer comprimento fixo sequência de números escalares. Um vetor de comprimento 2 representa um ponto em um plano 2D, um vetor de comprimento 3 representa um ponto em um espaço 3D, e assim por diante. Um vetor de comprimento 100 representa um ponto em um espaço 100-dimensional (matemáticos não têm problemas em pensar sobre tais coisas).

Nas bibliotecas de programação modernas, este nome" vector " tem vindo a significar geralmente uma variável sequência de tamanho de valores (não necessariamente números). Alteração do tamanho (comprimento ou dimensionalidade) de uma vetor matemático não é algo que você normalmente faria a menos que você esteja fazendo algum tipo de operação de projeção. Mas mudar o comprimento de um vetor de programação que contém uma sequência de strings pode ser uma operação comum.

 16
Author: Greg Hewgill, 2009-02-03 18:59:28

Os vetores matemáticos a que estás habituado são tensores de primeiro grau; as estruturas de dados na ciência da computação não obedecem necessariamente às regras de transformação tensorial. São apenas matrizes que podem expandir-se e contrair, como já foi dito.

 7
Author: duffymo, 2009-02-03 18:51:06

Os contentores vectoriais são implementados como matrizes dinâmicas; tal como as matrizes regulares, os contentores vectoriais têm os seus elementos armazenados em locais de armazenamento contíguos, o que significa que os seus elementos podem ser acedidos não só usando iteradores, mas também usando compensações em ponteiros regulares para elementos.

Mas ao contrário das matrizes regulares, o armazenamento em vectores é tratado automaticamente, permitindo que seja expandido e contraído conforme necessário.

Os vectores são bons em:

    A aceder elementos individuais pelo seu Índice de posição (tempo constante).
  • iterando sobre os elementos em qualquer ordem (tempo linear).
  • Adicionar e remover elementos do seu fim (tempo amortizado constante).

REF

 3
Author: cgreeno, 2009-02-03 19:06:21

Uma vez que pelo menos duas das outras respostas estão coladas neste site {[[2]}, Você também pode querer ler o resto da descrição lá... :-)

 1
Author: Adrian Grigore, 2009-02-03 18:49:47

Eu posso entender a sua confusão a partir dos nomes (eu costumava ser confundido por isso também). Não é ajudado pela ideia de um vetor em programação gráfica 3D, que está mais perto da definição matemática. Em matemática, um vetor pode ser considerado como uma matriz 1-dimensional de comprimento arbitrário (com o comprimento sendo o número de dimensões de seu sistema de coordenadas). Na maioria das línguas OO, os vetores são essencialmente matrizes 1-dimensionais( arrays), daí o nome. Eles não têm nada. tem a ver com coordenadas, a menos que o programador decida usá-las para essa tarefa (o que é raro-eu nunca vi isso). Eles também não costumam ter quaisquer operadores matemáticos para fazer multiplicação de matrizes ou quaisquer operações similares. Então a natureza 1-dimensional deles é sobre onde a semelhança termina. Vou deixar isso para as outras respostas para explicar as características e usos do recipiente OO,que eles já têm uma alça.

 1
Author: rmeador, 2009-02-03 18:52:02

Do livro do SICP:

Para modelar a memória do computador, usamos um novo tipo de estrutura de dados chamada vetor. Abstractly, a vector is a compound data object whose individual elements can be accessed by means of an integer index in an amount of time that is independent of the index.
 1
Author: Nemanja Trifunovic, 2009-02-03 19:04:55

Os vetores na programação são basicamente, matrizes dinâmicas em que o armazenamento é manuseado automaticamente permitindo que ele seja expandido e contratado conforme necessário.A melhor coisa é que eles também permitem acesso em tempo constante a elementos individuais através do Índice, assim como um array regular.

 1
Author: Budhathoki Bijaya, 2018-07-13 12:42:17

Https://isocpp.org/wiki/faq/containers tem muita informação que você precisa para entender o que rodeia esta questão. Ele vai contrastar vetores com listas vinculadas, arrays, e assim por diante.

Também, da tournée de Stroustrup (http://www.stroustrup.com/Tour.html ), Capítulo 9:

A maior parte da computação envolve a criação de colecções de valores ... Uma classe com o objetivo principal de segurar objetos é ... chamada de recipiente . ... O mais útil stl o contentor é vector. A stl::vector é uma sequência de elementos de um dado tipo. Os elementos são armazenados contiguosamente na memória.

Então um vetor STL é uma coleção de valores do mesmo tipo - desta forma é como o significado matemático do vetor/módulo-mas a questão principal é como os elementos são armazenados.

 0
Author: isomorphismes, 2015-09-01 16:50:03

Além da estrutura de dados em C++, um vetor também é um termo para um ponteiro para código. F. e. um vector de interrupção aponta para o código de interrupção a ser invocado.

 0
Author: Azure, 2017-07-20 23:41:00

Para ajudá-lo a lembrar o significado CS da palavra "vector", pode ser útil referir-se à raiz latina vehere, que significa transmitir ou transportar. Assim, um vetor carrega ou contém coisas, Geralmente falando.

 0
Author: Ezra Justin Lee, 2017-10-20 05:31:23