为什么此向量声明无效?

我得到的错误是“预期;”。

    const int SIZE = 9;

    vector<string>possiblePalindromes(SIZE) = // error is shown here
        { "A man a plan a canal Panama","The rain in Spain","No lemon,no melon","radar","CS1D","Was it a cat I saw?","Racecar","Saddleback","dad" };

我的问题是,这不是有效的声明吗?如果删除(SIZE),该错误就会消失,但我的目的是声明具有特定大小和一组预定义值的向量。这样,当我决定遍历向量时,例如

for (int i = 0; i < SIZE; ++i)

我可以直接引用向量的大小,而不是常量“ 9”。

我想这是行不通的

vector<string>possiblePalindromes(SIZE)

我声明的矢量大小为9,带有9个字符串默认值。这意味着{}中包含的所有内容都根本不会读入向量中。

haitv223 回答:为什么此向量声明无效?

实际上,您正在尝试同时使用两个构造函数初始化std::vector<std::string>类型的对象。

第一个构造函数如下

explicit vector(size_type n,const Allocator& = Allocator()); 

第二个构造函数是

vector(initializer_list<T>,const Allocator& = Allocator()); 

这没有道理。

您始终可以通过使用其成员函数size获得向量中元素的数量。而且,您始终可以使用向量resize来调整向量的大小。

此外,您可以在不需要知道元素数量的情况下使用基于范围的for循环。

所以只要写

vector<string>possiblePalindromes = 
    { "A man a plan a canal Panama","The rain in Spain","No lemon,no melon","radar","CS1D","Was it a cat I saw?","Racecar","Saddleback","dad" };

这是一个演示程序

#include <iostream>
#include <string>
#include <vector>

int main() 
{
    std::vector<std::string> possiblePalindromes = 
    { 
        "A man a plan a canal Panama","dad" 
    };

    std::cout << "The vecor contains " << possiblePalindromes.size() << " elements\n";

    std::cout << "They are:\n";

    for ( const auto &s : possiblePalindromes )
    {
        std::cout << '\t' << s << '\n';
    }

    return 0;
}

其输出为

The vecor contains 9 elements
They are:
    A man a plan a canal Panama
    The rain in Spain
    No lemon,no melon
    radar
    CS1D
    Was it a cat I saw?
    Racecar
    Saddleback
    dad
,

或者,如果您想要恒定大小,则可以改用std::array(请注意,大小是模板参数,例如std::string,而不是()中传递):

const int SIZE = 9; 

std::array<std::string,SIZE> possiblePalindromes = 
    { "A man a plan a canal Panama","dad" };
,

因为已经给出了矢量对象的一个​​积分参数初始化,即。它的大小,避免了矢量值的初始化。
一次只能声明一个。

这对您有帮助

  const int SIZE = 9;
  vector<string>possiblePalindromes =  //
        { "A man a plan a canal Panama","dad" };


possiblePalindromes.resize(SIZE);     // decides the size now

for (int i = 0; i < SIZE; ++i)
   // ...
本文链接:https://www.f2er.com/2749809.html

大家都在问