我是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.该功能有什么问题?如何修改它以打印正确的元素?
答案 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()
。
另一个错误是数组的索引。您可以访问从1
到elements
的元素,这会忽略第一个元素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;
}