在C++中打印矢量 我是C++的新手,我做了一个函数,它读取向量中的元素和打印元素的函数。问题是打印功能不能正常工作 #include <iostream> using namespace std;

在C++中打印矢量 我是C++的新手,我做了一个函数,它读取向量中的元素和打印元素的函数。问题是打印功能不能正常工作 #include <iostream> using namespace std;,c++,C++,一, 二, 它打印的是1348而不是12345。该函数有什么问题?如何修改它以打印正确的元素?您的打印函数有错误 for(i=1;i<=elements;i++) { //^^^^^ cout<<v[i]; ++i; //You would like to skip some elements? } 将索引i增加两次,数组索引从0开始,而不是从1开始;它以数字元素结束,1不是元素,同时,您使用的是数组,而不是向量 int

一,

二,


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

您的打印函数有错误

for(i=1;i<=elements;i++)
{                   //^^^^^
    cout<<v[i];
    ++i;  //You would like to skip some elements?
}
将索引i增加两次,数组索引从0开始,而不是从1开始;它以数字元素结束,1不是元素,同时,您使用的是数组,而不是向量

int v[elements];
这将创建一个新的整数数组

传递数组相对比较困难,因为您必须小心处理内存分配,而且它们可以追溯到C的旧时代

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

您可以通过引用&将对象传递到函数中,在函数内部,它将能够修改传入的对象,并在函数完成后产生持久的效果

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() {
    UserIntegers userIntegers;
    userIntegers.process();
}
在read中,将元素读入本地数组v。当函数结束时,数组也将消失。同样的情况也发生在print_vector中

另一个错误是数组的索引。可以访问从1到包含1的元素,这将忽略第一个元素0,并最终访问数组边界元素之外的一个元素

您需要在这两个函数之外分配一个数组,最好是一个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;
}

您的代码正在使用编译器扩展。使用std::vector而不是可变长度数组。请阅读并遵循建议。我应该如何设计打印函数,使其不会创建新的整数数组?我认为您缺少std::的模板参数:vector@JorgeN谢谢你,我错过了。固定的
int main() {
    vector<int> elements;
    read(elements);
    print(elements);
}
class UserIntegers {
public:
    void process() {
        read();
        print();
    }
private:
    vector<int> numbers;
};
int main() {
    UserIntegers userIntegers;
    userIntegers.process();
}
#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;
}