使用向量c++
Working with vectors C++
复杂的问题,可能简单的答案。因此,我需要制作的程序不能包含String、iostream和vector以外的任何库。我需要创建一个程序,有3个功能。一个创建一个整型向量,一个反转一个向量,还有一个输出一个向量。为了获取值,我需要使用getline来获取一个字符串,如果字符串状态退出,我们停止向其中放入新值。否则,我们需要测试它是否是整数(正数或负数),并将其添加到vector中。我的代码开始变得复杂了,所以我真的需要一些帮助。下面是我到目前为止所做的。我也在使用Visual Studio,如果这很重要的话。提前感谢您的帮助!我的问题是,当我运行程序时,它只会输出第一个数字。我不知道为什么,我想知道我做错了什么。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> CreateVector()
{
string tempvariable;
bool quit = false;
vector<int> userinput;
cout << "Please enter in an integer, type 'quit' to exit " << endl;
while (!quit)
{
getline(cin, tempvariable);
if (tempvariable == "quit")
quit = true;
else
{
bool isaninteger = true;
for(int i = 1; i <= tempvariable.size(); i++)
{
if (tempvariable[i] = "-" || isdigit(tempvariable[i]))
continue;
else
{
cout << "You entered in an incorrect option, please enter in a correct option" << endl;
cin.clear();
cin.ignore();
isaninteger = false;
break;
}
}
if (isaninteger)
userinput.push_back(stoi(tempvariable));
cout << "Please enter in an integer, type 'quit' to exit " << endl;
}
}
return userinput;
}
void printVector(vector<int> userinput)
{
int amountofspots = userinput.size();
cout << "Your Vector is ";
for (int i = 0; i < amountofspots; i++)
{
if (i = (amountofspots - 1))
cout << userinput.at(i) << endl;
else
cout << userinput.at(i) << " , ";
}
}
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 0; i < amountofspots; i++)
tempvector.push_back(userinput.at(amountofspots - i));
for (int i = 0; i < amountofspots; i++)
userinput.pop_back();
for (int i = 0; i < amountofspots; i++)
userinput.push_back(tempvector.at(i));
}
int main()
{
vector<int> CreatedVector = CreateVector();
printVector(CreatedVector);
reverseVector(CreatedVector);
printVector(CreatedVector);
system("pause");
return 0;
}
-
在
printVector()
的环路中将if (i = (amountofspots - 1))
改为if (i == (amountofspots - 1))
-
将
CreateVector()
中的tempvariable[i] = "-"
改为tempvariable[i] == '-'
=
是赋值操作符,==
是比较操作符。此外,单个字符被单引号包围,而不是双引号。
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 0; i < amountofspots; i++)
tempvector.push_back(userinput.at(amountofspots - i));
应该是
void reverseVector(vector<int>& userinput)
{
int amountofspots = userinput.size();
vector<int> tempvector;
for (int i = 1; i < amountofspots+1; i++) // Index error
tempvector.push_back(userinput.at(amountofspots - i));
以下内容:
for(int i = 1; i <= tempvariable.size(); i++) { if (tempvariable[i] = "-" || isdigit(tempvariable[i]))
必须成为:
for(int i = 0; i < tempvariable.size(); i++)
{
if (tempvariable[i] == '-' || isdigit(tempvariable[i]))
解释:
- 字符串索引从0开始到size() - 1结束。
-
[i]
返回单个char
。"-"
不是单个的char
,而是一个完整的字符串字面值。您不能直接比较单个char
与整个字符串。然而,-
是单个char
,因此比较将工作。 -
=
不是比较,而是赋值。==
用于比较。因为你的编译器应该警告你!
请注意,您的代码还有其他问题:
if (i = (amountofspots - 1))
你又把赋值和比较混在一起了。设为==
。还要注意编译器的警告!
最后,isdigit
并不是一个很好的函数。为了真正正确地使用它,首先必须将操作数强制转换为int
,同时确保它不是一个无效值,如这里所述。
如果指定的字符串不能被解析,为什么不直接捕获stoi
抛出的异常呢?
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么