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.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
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.
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.
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).
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á... :-)
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.
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.
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.
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
. Astl::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.
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.
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.