Cómo crear un vector de tamaño definido por el usuario, pero no con valores predefinidos?

En C++ se puede crear una matriz de tamaño predefinido, como 20, con int myarray[20]. Sin embargo, la documentación en línea de vectores no muestran un igual manera de inicializar los vectores: en su Lugar, un vector debe ser inicializado con, por ejemplo, std::vector<int> myvector (4, 100);. Esto le da un vector de tamaño 4 con todos los elementos, siendo el valor de 100.

¿Cómo puede un vector de ser inicializadas con sólo un tamaño predefinido y sin valor predefinido, como con matrices?

  • Leer la documentación? cplusplus.com/reference/stl/vector/vector cplusplus.com/reference/stl/vector/resize
  • He ligado, tanto en la edición, la grasa de los dedos es la primera vez 😉
  • también es posible que desee leer ¿Qué tiene de malo cplusplus.com?.
  • No hay ninguna manera. Hay una carretera.
  • lo siento a todos, fue un error que yo. Siempre he creado vector mediante su constructor predeterminado, nunca leído que hay un constructor que toma dos argumentos, el primero como el número de elementos y el segundo con el valor del elemento. Este constructor crea un vector de tamaño definido por el usuario y también asigna los valores definidos para todas las posiciones.
  • la documentación es muy difícil entender a veces. cplusplus.com/reference/vector/vector/vector Si usted expland el c++11 ficha que usted tiene que centrarse para encontrar esto: explícito vector (size_type n); lo que está diciendo básicamente que puede establecer el tamaño y no el relleno de valor, de modo std:vector<int> arr(20) de trabajo. pero yo también podía encontrar esto en primer lugar y sólo vio el constructor que recibe 2 parámetros (tamaño, fillvalue)
  • También no es muy explícita en la documentación de lo que se hace si no la inicialización explícita valor es proporcionado: no hacer nada o inicializar con un valor predeterminado. Si lo que quieres hacer es inicializar el vector de sí mismo justo después de la asignación no desea que cualquier inicialización de hecho antes de que. Es sólo el tiempo perdido en el programa.

InformationsquelleAutor Naphstor | 2012-05-11

1 Kommentar

  1. 54

    Con el constructor:

    //create a vector with 20 integer elements
    std::vector<int> arr(20);
    
    for(int x = 0; x < 20; ++x)
       arr[x] = x;
    • Lo siento, no me funciona, OS X Mavericks LLVM, predeterminado para xcode 4.2+. Qué compilador estás usando?
    • Nada mágico acerca de los compiladores que yo he utilizado. Esto es con todos los estándares de comportamiento definido. Si este código no funciona, sospecha o compilador de xcode extensiones que romper.
    • Ok veo, creo que LLVM utiliza el sonar para c++, por lo que es extraño. Pensé que el vector debe ser visto más o menos como la sustitución de la matriz de estos días, y que no debe reflejarse en la sintaxis (que debería ser lo que se escribe por entonces). Extraño que mi compilador no lo permite. Aún así, el punto de este comentario es para agregar una extensión a lo que ya está escrito; por Lo tanto, std::vector<int> arr = std::vector<int> (20); trabajado muy bien para mí, que declaran específicamente que quiero usar el constructor vector.
    • Mirando hacia atrás en este ahora, veo que probablemente no se ha podido para que becaues de la «más irritantes que analizar». Trate de añadir algunos paréntesis alrededor de los 20, como este: std::vector<int> arr((20));
    • Es mejor utilizar arr.at(x)=x para comprobar out_of_bounds errores. arr[x]=x fallará en silencio si algún error se produce.
    • Si usted requiere la comprobación de rango sí, at() hace la comprobación y se lanzará una excepción para un fuera de los límites de error, mientras que [] no realiza ninguna comprobación.
    • Yo soy la definición de un vector de unsigned short int como una función miembro. Quiero inicializar su tamaño para 6. Con su método puedo obtener Expected parameter declarator: ¿por Qué?
    • mostrar el código @francesco

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea