用c ++打印矢量

时间:2013-03-15 20:48:01

标签: c++

我是C ++的新手,我创建了一个函数,用于读取向量中的元素和打印元素的函数。问题是打印功能不能正常工作。

 #include <iostream>
    using namespace std;

1)

int read()
{
    int elements,i;
    cout<<"Give the number of elements:";
    cin>>elements;
    int v[elements];
    for(i=1;i<=elements;i++)
    {
        cout<<"v["<<i<<"]=";
        cin>>v[i];
    }
    return elements;
}

2)

void print_vector(int elements)
{
    int i;
    int v[elements];
    for(i=1;i<=elements;i++)
    {
        cout<<v[i];
    }
}

int main()
{
    int n=read();
    print_vector(n);
    return 0;
}

Example:
Give the number of elements:5
v[1]=1
v[2]=2
v[3]=3
v[4]=4
v[5]=5
1348

它打印1348而不是12345.该功能有什么问题?如何修改它以打印正确的元素?

3 个答案:

答案 0 :(得分:3)

int v[elements];

这会创建一个全新的整数数组。

传递数组相对困难,因为你必须小心如何处理内存分配,并且它们可以追溯到C的旧时代。

在您学习C++时,您可以使用class来管理内存问题。 std::vector在语法上类似于数组,但是为你调整分配和调整大小,并记住它的大小。

您可以通过引用&将对象传递给函数,并且在函数内部,它将能够修改传入的对象,并在函数完成后具有持久的效果。

void read(vector<int>& elements) {
    // in here you can resize the vector
}

void print(const vector<int>& elements) {
    // passing in elements by const reference means you can't modify it
}

总而言之:

int main() {
    vector<int> elements;
    read(elements);
    print(elements);
}

或者,如果您希望面向对象,则应该寻找将数据和函数组合在一起的方法,以避免完全传递数据。在这种情况下,您可以对矢量以及读取和打印功能进行分组。也许称之为UserIntegers

class UserIntegers {
public:
    void process() {
        read();
        print();
    }
private:
    vector<int> numbers;
};

用法:

int main() {
    UserIntegers userIntegers;
    userIntegers.process();
}

答案 1 :(得分:2)

您的打印功能有错误

for(i=1;i<=elements;i++)
{                   //^^^^^
    cout<<v[i];
    ++i;  //You would like to skip some elements?
}

你增加索引i两次,数组索引从0开始,而不是1;它以数字(元素-1)而不是元素结束,同时,你使用的是数组,而不是矢量。

答案 2 :(得分:2)

read()中,您将元素读入本地数组v。当函数结束时,数组也会消失。同样发生在print_vector()

另一个错误是数组的索引。您可以访问从1elements的元素,这会忽略第一个元素0并最终访问数组边界之外的一个元素(elements)。

您需要在两个函数之外分配一个更好的std::vector数组,并将其传递到read()以填充并传入print_vector()进行打印。

#include <iostream>
#include <vector>

void read(std::vector<int> &v)
{
    int elements,i, n;
    std::cout<<"Give the number of elements:";
    std::cin>>elements;
    for(i = 0; i < elements; i++)
    {
        std::cout<<"v["<<i<<"]=";
        std::cin>> n;
        v.push_back(n);
    }
}

void print_vector(const std::vector<int> &v)
{
    for(auto i = v.begin(); i != v.end(); ++i)
    {
        std::cout << *i;
    }
}

int main()
{
    std::vector<int> v;
    read(v);
    print_vector(v);
    return 0;
}