我习惯使用函数做一个代码,在询问用户输入之后,将数字放在向量之前,如下所示: 如果vector是11,12,13,14 新的向量是1 11 2 12 3 13 4 14直到向量完成然后我必须打印它但我得到一个向量下标超出范围的错误,aprecciate任何帮助。 这是我的代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<double> llena_vector(int x,vector<double> ingreso)
{
cout<<"Ingrese numeros: ";
while(cin>>x);
ingreso.push_back(x);
return ingreso;
}
vector<double> arma_vector(int contador,vector<double> intercalado)
{
int i=0;
for(contador=1;contador< intercalado.size()+1;contador++);{
intercalado.insert(intercalado.begin()+i,contador);i++;}
return intercalado;
}
vector<double> imprime_vector(int cuenta,vector<double> imprimir)
{
for(cuenta=0;cuenta<imprimir.size();cuenta++);
cout<<imprimir[cuenta]<<" ";
return imprimir;
}
int main()
{
int y=0;
int q=0;
int w=0;
int f=0;
vector<double> usuario;
vector<double> guardar;
vector<double> resultado;
vector<double> print;
guardar= llena_vector(y,usuario);
resultado=arma_vector(q,guardar);
print=imprime_vector(w,resultado);
system("pause");
}
答案 0 :(得分:2)
这是代码的清洁版本,处于工作状态。
#include <iostream>
#include <vector>
using namespace std;
void fill_vector(vector<double>& v)
{
cout << "Enter 5 numbers." << endl;
for (int i = 0; i < 5; ++i)
{
double d;
cin >> d;
v.push_back(d);
}
}
void insert_count(vector<double>& v)
{
size_t size = v.size();
for (size_t i = 0, j = 0; i < size; ++i, j += 2)
{
vector<double>::iterator pos = v.begin() + j;
v.insert(pos, i + 1);
}
}
void print_vector(vector<double>& v)
{
for (size_t i = 0; i < v.size(); ++i)
cout << v[i] << " ";
cout << endl;
}
int main()
{
vector<double> v;
fill_vector(v);
insert_count(v);
print_vector(v);
}
像其他人(可能有)指出的那样:
(;
直接放在循环语句后面size_t
通常比int
更好<string>
using namespace std
),但我保留原样,因为它在示例代码中很常见答案 1 :(得分:1)
我想有一个拼写错误:你应该删除;
中的最后一个for(cuenta=0;cuenta<imprimir.size();cuenta++);
编辑:正如jrd1所指出的,你在所有for和while循环中都有这个错字......
答案 2 :(得分:1)
首先,您的代码存在许多问题。但是,我已对其进行了修改,使其与原始版本保持一致。
#include <iostream>
#include <string>
#include <deque>
#include <cstdlib>
using namespace std;
deque<double> llena_deque(int x, deque<double> ingreso)
{
cout<<"Ingrese numeros: ";
while(cin>>x)
ingreso.push_back(x);
return ingreso;
}
deque<double> arma_deque(int contador, deque<double> intercalado)
{
int size = intercalado.size()+1;
for(int i=1; i < size; ++i) {
cout << i << endl;
intercalado.push_front(i);
}
return intercalado;
}
deque<double> imprime_deque(int cuenta, deque<double> imprimir)
{
for(cuenta=0;cuenta<imprimir.size();cuenta++)
cout << imprimir[cuenta] << " ";
return imprimir;
}
int main()
{
int y=0;
int q=0;
int w=0;
int f=0;
deque<double> usuario;
deque<double> guardar;
deque<double> resultado;
deque<double> print;
guardar= llena_deque(y,usuario);
resultado=arma_deque(q,guardar);
print=imprime_deque(w,resultado);
return 0;
}
;
。这就是为什么你得到错误的一个原因,因为分号终止了一个语句 - 因此,你的循环永远不会真正访问向量,这就是为什么你得到了内存访问违规。deque
(就像我一样),因为它具有为此目的明确设计的功能(在两端插入操作)。虽然,我会说你的代码的逻辑有时很令人费解:即在arma_vector
中,如果你甚至不使用它,为什么要传递contador
的值?您可以使用i
代替......