好的,所以我试图将输入读入矢量,然后以相反的顺序打印出来。 我有一个非常好的想法如何做到(我认为),但我的问题是我的代码只读取向量的第一个插槽中的用户输入。 。 。我需要它从输入中读取10个单独的字符串到我的向量中的10个不同的插槽。 。 。这是我到目前为止所得到的:
#include <iostream>;
#include <vector>;
#include <string>;
using namespace std;
int main()
{
vector<string> name_list(11);
int n = 0;
for (int n = 0; n < 11; ++n);
getline(cin, name_list[n]);
cout << name_list[0];
int stop;
cin >> stop;
return 0;
}
答案 0 :(得分:1)
循环语句后面有分号
for (int n = 0; n < 11; ++n);
所以循环什么都不做
此外,您还在谈论需要阅读的10个要素。
代码可能看起来如下:
const size_t N = 10;
vector<string> name_list( N );
for ( int n = 0; n < N; ++n )
{
getline( cin, name_list[n] );
}
for ( vector<string>::size_type n = name_list.size(); n != 0; )
{
cout << name_list[--n] << endl;
}
同样可以使用标准算法编写。例如
const size_t N = 10;
vector<string> name_list;
name_list.reserve( N );
copy_n( istream_iterator<string>( cin ), N, back_inserter( name_list ) );
reverse_copy( name_list.begin(), name_list.end(), ostream_iterator<string>( cout, "\n" ) );
答案 1 :(得分:0)
不确定您要问的是什么,但我会向前迈进一步,并假设您的代码出现问题并需要帮助修复它。
问题很简单。在for()
循环的右括号后,您有一个分号。当我回答你的上一句话时,我在for循环后加上分号的唯一原因是因为我不需要在for循环体中添加任何东西。这与您使用getline(cin, name_list[n])
的代码形成对比,我认为这是一个用于for循环体的语句。
在这种情况下,你不能在for循环后添加分号。它所做的只是运行for循环11次而不执行任何语句,然后它将继续到下一行,它将从std::cin
读取一行到向量的第一个插槽。这当然不是故意的。解决方法是删除分号。
for (int n = 0; n < 11; ++n) // <-- semicolon gone
std::getline(std::cin, name_list[n]);
我还看到你的#include
语句后面有分号。这些也无效,请删除它们。
答案 2 :(得分:0)
只需删除分号
即可#include <iostream>;
^
#include <vector>;
^
#include <string>;
^
for (int n = 0; n < 11; ++n);
^
getline(cin, name_list[n]);
并且所有值都将在向量中结束。请注意,在它之后,您只打印第一个值
cout << name_list[0];
循环播放以打印完整内容:
for ( int i = name_list.size(); i--; )
{
cout << name_list[i] << endl;
}