使用向量的基本c++函数

Basic c++ function using vectors

本文关键字:c++ 函数 向量      更新时间:2023-10-16

我正在做一些矢量练习。我创建了一个函数,用定义的大小填充向量,但是当我试图使它的大小为n时,向量显然充满了垃圾内存,它显示:0x23fe20,当我试图使用向量时,我的代码崩溃了。

#include <iostream> 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;

int cargavn(int vec[])    // fill vector
{
    int i, t;       
    cout << "vector size: ";
    cin >> t;
    for(i = 0 ; i <= t-1; i++)
    {
        cout << "v["<< i <<"]=";
        cin >> vec[i];
    }
return (1);
}

int main()
{
    int vec[10];  // the vector, size here wont matter
    cargavn(vec); // call fill vector n positions
    cout << vec;    // to test if the vector is well filled
    system("PAUSE");
}

您正在等待count <<以某种方式打印出向量。它不会,它只是输出地址

您需要遍历内容并打印每个元素

for(int i =0 ; i < 10 ; i++)
{
   cout << vec[i];
}

下面是使用现代c++的效果:

#include <iostream>
#include <vector>
using namespace std;
void cargavn(vector<int> &vec)
{
    int t;       
    cout << "vector size: ";
    cin >> t;
    for(int i = 0; t > 0; ++i, --t)
    {
        cout << "v["<< i <<"]=";
        int v;
        cin >> v;
        vec.push_back(v);
    }
}
ostream &operator<<(ostream &s, vector<int> const &vec)
{
    s << '{';
    bool first = true;
    for (int v : vec)
    {
        if (!first)
        {
            s << ", ";
        }
        s << v;
        first = false;
    }
    return s << '}';
}
int main()
{
    vector<int> vec;
    cargavn(vec);
    cout << vec;
    system("PAUSE");
    return 0;
}

与你的版本相比,这个版本需要了解的事情:

  • 提交不必要的包含。
  • 首选c++容器,如vector而不是C风格的数组。
  • 当需要容纳用户提供的任意数量的值时,使用动态大小的容器,而不是当用户输入过多数据时损坏的固定大小的容器。参见0,1,无穷大规则
  • 当一个函数的所有控制路径返回相同的值时,返回的值是没有意义的,可以省略。特别是如果调用者都懒得检查返回值。我怀疑您的意图是使用返回值来指示某种意外错误。这是一种c风格的错误处理方法。c++使用异常来处理意外错误。
  • 重载operator<<以扩展流插入操作符来决定容器和您自己的自定义类型应该如何格式化。标准库没有为vector提供任何这样的插入操作符,因为没有一种普遍同意的方式来决定值的向量应该如何格式化。所以你自己决定吧。
  • main返回一个值是很好的形式,即使这在技术上不是必需的。