在C++中,只将一个向量中的字母复制到另一个向量
Copying only the letters in a vector to another vector in C++
我只需要在二维向量中找到字母,并将它们复制到一维向量中。例如,矢量可能包含:
3 4 5
A B
A C
A B
B C
1 C 3
然后,新矢量将包含:
A B C
这些信不应该重复。这是一个更大项目的一部分,我被困在这个部分。
您可以使用数组跟踪您看到的字母:
bool seen[26] = { false };
for (const auto& v : v2d)
for (const auto& c : v)
if ('A' <= c && c <= 'Z')
seen[c - 'A'] = true;
std::string result;
for (char c = 'A'; c <= 'Z'; ++c)
if (seen[c - 'A']) result += c;
您使用了错误的Letters容器。改变你在片场的矢量,你会得到正确的行为:
std::set<string> Letters;
所以我有这两个向量:
vector<vector<string>> gateInputs; //2D vector with data
vector<string> Letters; // Vector where I'll store only the letters
我被告知要使用isalpha
,但它只适用于char
,并且我的矢量类型为string
,所以我使用了以下函数:
bool all_alpha(const std::string& str)
{
for (std::size_t i = 0; i < str.size(); ++i)
if (!std::isalpha(str[i])) return false;
}
然后我调用该函数,只存储矢量Letters
:中的字母
for (int i = 0; i <gateInputs.size(); i++)
{
for (int j = 0; j<gateInputs[i].size(); j++)
{
if (all_alpha(gateInputs[i][j]))
{
string m = gateInputs[i][j];
Letters.push_back(m);
}
}
}
它奏效了。现在矢量Letters
包含以下内容:
A B A C A B B C C
然后我只需要对矢量进行排序并删除重复项:
// Sort letters in vector
sort(Letters.begin(), Letters.end());
// Erase duplicates
Letters.erase(unique(Letters.begin(), Letters.end()), Letters.end());
完成了!阵列现在包含:
A B C
相关文章:
- 将指向给定子类的指针从一个向量复制到另一个向量
- 将字符向量复制到另一个向量
- 将shared_ptr的向量复制到抽象基的派生类
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 自定义类对象的C++向量 - 复制构造函数已删除 - std::ifstream
- 如何在C++中将一个对象从一个向量复制到另一个向量?
- 将特征向量复制到 C 数组
- 将std ::向量复制到CV :: Mat_的行操作相同
- 将向量复制到 std::string
- 如何以相反的顺序将整个向量复制到队列中
- 按索引将类类型元素从一个向量复制到另一个 c++
- 使用迭代器将向量复制到数组中
- 为什么是非法的:将指针向量复制到指向常量的指针向量中
- 将元素从一个向量复制到另一个向量的最有效方法,给定一个不被复制的索引列表
- C++-将数据从浮点向量复制到uint8向量
- 将字符串从向量复制到字符串
- 我可以使用STD ::复制将数据的位模式从整数向量复制到一系列未签名的字符
- 将指针从一个向量复制到另一个向量;地址指出了变化
- 如何将内容从一个字符串向量复制到另一个字符串向量
- 以相反的顺序将一个向量复制到另一个向量