C ++ Отображение вектора - PullRequest
0 голосов
/ 18 марта 2020

Я изучаю C ++, поэтому мой вопрос может показаться немного глупым. Я хотел построить функцию, которая печатает каждый элемент в векторе. Я придумаю это, но, похоже, отображает адрес каждого элемента. Я гуглю это и нахожу хорошее решение, но я хотел сделать это так, чтобы кто-нибудь мог объяснить мне, где я делаю что-то не так. Мой код:

void display_vector(std::vector<int>& to_display);


int main()
{
    std::vector<int> vector_to_sort = { 2,6,7,2,1,80,2,59,8,9 };


    display_vector(vector_to_sort);
}

void display_vector(std::vector<int> &to_display)
{
    for (int i = 0; i < to_display.size(); i++)
    {
        std::cout << to_display[i] << ', ';
    }

    std::cout << '\n';
}

Решение, которое я нашел на inte rnet:

#include <iterator>

void display_vector(const vector<int> &v)
{
    std::copy(v.begin(), v.end(),
        std::ostream_iterator<int>(std::cout, " "));
}

Вывод моего кода:

21129661129671129621129611129680112962112965911296811296911296

Ответы [ 4 ]

1 голос
/ 18 марта 2020

В этом выражении

std::cout << to_display[i] << ', ';
                              ^^^^^^

вы используете многобайтовый символьный литерал, который имеет значение, определенное реализацией.

Замените его строковым литералом ", ".

Что касается функции, то для стартеров, если вектор не изменяется в функции, тогда параметр должен быть постоянной ссылкой.

Вы можете использовать диапазон для l oop для вывода элементов вектора, например,

#include <iostream>
#include <vector>

std::ostream & display_vector( const std::vector<int> &to_display, std::ostream &os = std::cout );

int main()
{
    std::vector<int> vector_to_sort = { 2,6,7,2,1,80,2,59,8,9 };

    display_vector(vector_to_sort) << '\n';
}

std::ostream & display_vector( const std::vector<int> &to_display, std::ostream &os )
{
    for ( const auto &item : to_display )
    {
        os << item << ", ";
    }

    return os;
}

Используя такую ​​функцию, вы можете, например, вывести вектор в текстовом файле.

1 голос
/ 18 марта 2020

Вы используете «,» вместо «,».

Вы можете использовать любой из следующих механизмов печати в функции display():

void display_vector(std::vector<int> &to_display)
{
    //by using Normal for loop
    for (auto i = to_display.begin(); i != to_display.end(); ++i) {
        cout << *i << " ";
    }

    cout << endl;

    //by using Range based for loop
    for (int & i : to_display) {
        cout << i << " ";
    }

    std::cout << '\n';
}
0 голосов
/ 19 марта 2020

Отладчики облегчают анализ векторов, но я включаю простой шаблон для печати векторов стандартных типов и часто использую его при отладке данных, которые я sh просматриваю с помощью других инструментов.

template<class T>
void print(const std::vector<T>& v){
for (auto x: v)
    std::cout << x << std::endl;
}
0 голосов
/ 18 марта 2020

Просто замените строку ниже

std::cout << to_display[i] << ', ';

на

std::cout << to_display[i] << ", ";

Также обратите внимание, что если вы просто хотите отобразить вектор в функции, объявите параметр как константная ссылка как показано ниже

void display_vector(const std::vector<int> &to_display);
...